我正在使用zend框架开发一个Web应用程序。对于select语句,我使用了以下方式。
例如:
public function getData($name)
{
$sql = "SELECT * from customer where Customer_Name = '$name'";
return $this->objDB->getAdapter()->fetchAll ($sql);
}
这很好用。但如果我将客户名称发送为:colvin's place
,
查询失败。我知道这是因为单引号。
之前我使用过addslashes PHP函数。但我发现这不是一个很好的方法。这次我使用了mysql_real_escape_string
PHP函数。
问题在于警告后说。
Warning</b>: mysql_real_escape_string() [<a href='function.mysql-real-escape-string'>function.mysql-real-escape-string</a>]: Access denied for user 'ODBC'@'localhost' (using password: NO)
这是因为mysql_real_escape_string
函数需要与mysql_connect
打开的数据库建立连接。我的问题是如何在* Zend_DB *类中使用它。我总是需要使用自定义选择查询。如果可以,请欣赏您的其他建议。
谢谢
答案 0 :(得分:8)
您可以使用quote()
提供的Zend_Db
功能:
http://framework.zend.com/manual/en/zend.db.adapter.html#zend.db.adapter.quoting.quote
答案 1 :(得分:2)
你也可以使用参数绑定,然后方法如下:
public function getData($name)
{
$sql = "SELECT * from customer where Customer_Name = :name";
return $this->objDB->getAdapter()->fetchAll ($sql, ['name' => $name]);
}
然后您的数据将自动转义
答案 2 :(得分:1)
我有同样的问题,这个解决方案适合我。我希望这将有所帮助。 你可以这样做:
$quote_removed_name = str_replace("'","''",$name);
然后以这种方式编写您的查询:
$sql = "SELECT * from customer where Customer_Name = '$quote_removed_name'";
答案 3 :(得分:1)
我有这个问题,我用这种方式正常工作:
您可以使用 quote()
:
quote ()方法接受单个参数,即标量字符串值。它返回带有特殊字符的值,该特殊字符以适合您正在使用的RDBMS的方式进行转义,并由字符串值分隔符包围。标准SQL字符串值定界符是单引号(&#39;)。
但引用返回一个字符串,其中包含&#39;字符串&#39; (在引号内返回),例如我从输入文本框中获取用户的字符串(或通过GET方法中的URL)
$string = $this->parameters['string']; // This is like $_POST or $_GET
$string = $this->db->quote($string);
$string = substr($string, 1, strlen($string)-2);
//The above line will remove quotes from start and end of string, you can skip it
现在我们可以使用此$string
,就像 mysql_real_escape_string
返回