繁体   English   中英

mysql_real_escape_string返回空白的奇怪问题

[英]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将用户数据添加到查询中。 手动调用转义功能通常是一个错误。

如果您使用的是Magento,则可能需要查看如何使用Magento数据库层对值进行转义

对于上一个问题 ,您可能没有“数据库连接”。

通常令人困惑的是,当mysql_real_escape_string文档讨论数据库连接时,它们特别是指使用mysql_connect函数打开的数据库连接。

如果您使用Magento的标准对象与数据库进行通讯,则没有mysql_connect连接,而有PDO连接 (通过Zend_Db_Adapter )。 PDO旨在鼓励参数化查询。

所以,您在这里的选择

  1. 顺其自然,并使用参数化查询字符串构建查询。 (如果您无法弄清楚如何对一些代码示例提出新的疑问,该如何设置才对)。

  2. 适配器对象有一个quote方法 ,您可以使用它对字符串进行引用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM