gpt4 book ai didi

php - 如何检查使用 addslashes 添加的表中是否存在字符串?

转载 作者:太空宇宙 更新时间:2023-11-03 12:00:01 25 4
gpt4 key购买 nike

我使用以下函数将名称存储在名为“名称”的数据库列中:

public function insertCategory($arrCat) { 
$id = $this->insert($arrCat);
return $id;
}

$arrCat 从我的 Controller 传递过来:

$arrCat = array(
'name' => addslashes($name),
'type' => $type,
'rank' => $catOrder,
'created_by' => $created_by,
'created' => Zend_Date::now()->toString('yyyy:MM:dd HH:mm:ss'),
'active' => 'y',
'app_id' => $appId
);

此代码正确插入数据。但我希望“名称”是唯一值,所以我编写了一个函数 checkNameExists($name, $created_by, $app_id):

public function checkNameExists($name,$created_by,$app_id) {
$sql= $this->_db->select("name")
->from("titles")
->where("name LIKE '" . addslashes($name) . "' AND created_by='" . $created_by . "' AND app_id = '".$app_id."' ");

//Tried with this query as well
//$sql="select name from titles where name = '$name' AND created_by=$created_by AND app_id=$app_id";

$result = $this->_db->fetchAll($sql);

if(count($result) > 0){
return 1;
} else {
return 0;
}
}

因此,根据 checkNameExists() 返回的值,我想执行插入或向用户返回“名称已存在”消息。但是函数 checkNameExists 始终返回 0,即使我的表中存在相同的名称也是如此。

我正在使用 Zend Framework 1 和 MySQL。

最佳答案

Zend_Db_Select 有一个很好的流畅界面。您需要做的第一件事是更好地使用其准备好的语句:

$sql = $this->_db->select()
->from('titles', array('name'))
->where('name = ?', $name)
->where('created_by = ?', $created_by)
->where('app_id = ?', $app_id);

这将有助于解决 SQL 注入(inject)问题。因为Zend_Db在插入的时候使用了prepared statements,所以不需要使用addslashes,直接传入raw即可。这将简化将其从数据库中取出的过程,因为您不需要 stripslashes。此外,因为您正在比较未斜杠的字符串,所以您需要的只是 = 运算符,因为 LIKE 仅在您使用 % 时有效一个通配符。

关于php - 如何检查使用 addslashes 添加的表中是否存在字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29893807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com