[英]Weird issue where mysql_real_escape_string is returning blank
我正在创建一个magento模块,并且在控制器中尝试生成查询。 例如: "INSERT INTO ". $resource->getTableName('mymod/mymodtable')." SET
"INSERT INTO ". $resource->getTableName('mymod/mymodtable')." SET
pid ='".mysql_real_escape_string($pp['id'])."'";
在我的本地设置中,这可以正常运行,并且我在pid
获得了预期的id
。 但是,一旦我将其上传到服务器,该部分就会变成空白。 我知道数据库连接存在,因为它在服务器上插入了一个空白pid
的新行。 我尝试了var_dump
,它确实证明$pp['id']
具有该值,但是mysql_real_escape_string
返回空白。 我也尝试了mysqli_real_escape_string
,但是什么也没有。 有任何想法吗?
您正在使用哪个数据库接口? mysql_real_escape_string
仅应与mysql_query
一起使用,并且如果可以避免的话,则不应使用该接口。 没有有效的连接,它可能无法正常运行。
使用mysqli
,应使用参数化查询和bind_param
将用户数据添加到查询中。 手动调用转义功能通常是一个错误。
对于上一个问题 ,您可能没有“数据库连接”。
通常令人困惑的是,当mysql_real_escape_string
文档讨论数据库连接时,它们特别是指使用mysql_connect
函数打开的数据库连接。
如果您使用Magento的标准对象与数据库进行通讯,则没有mysql_connect
连接,而有PDO连接 (通过Zend_Db_Adapter
类 )。 PDO旨在鼓励参数化查询。
所以,您在这里的选择
顺其自然,并使用参数化查询字符串构建查询。 (如果您无法弄清楚如何对一些代码示例提出新的疑问,该如何设置才对)。
适配器对象有一个quote方法 ,您可以使用它对字符串进行引用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.