我正在创建一个magento模块,并且在控制器中我正在尝试生成一个查询。
例如:"INSERT INTO ". $resource->getTableName('mymod/mymodtable')." SET
pid ='".mysql_real_escape_string($pp['id'])."'";
在我的本地设置上,这可以正常工作,我在id
中获得了预期的pid
。但是一旦我将其上传到我的服务器,该部分就会变成空白。我知道数据库连接存在,因为它在服务器上插入了一个空行pid
的新行。我尝试了var_dump
,它确实证明$pp['id']
具有值,但mysql_real_escape_string
返回空白。我也试过mysqli_real_escape_string
,但没有。有什么想法吗?
答案 0 :(得分:0)
您使用的是哪个数据库界面? mysql_real_escape_string
应仅 与mysql_query
一起使用,如果可以避免,则不应使用该界面。如果没有有效的连接,它可能无法正常运行。
使用mysqli
时,您应该使用参数化查询,bind_param
将用户数据添加到查询中。手动调用转义函数通常是一个错误。
如果您正在使用Magento,您可能希望使用Magento数据库层查看how to escape values。
答案 1 :(得分:0)
根据此previous question,您可能没有“数据库连接”。
常常令人困惑的是,当mysql_real_escape_string
文档谈到数据库连接时,它们特指的是使用mysql_connect
函数打开的数据库连接。
如果您使用Magento的标准对象与数据库通信,则表示您没有mysql_connect
连接,而是PDO connection(通过Zend_Db_Adapter
class)。 PDO旨在鼓励参数化查询。
那么,你的选择
使用流程并使用参数化查询字符串构建查询。 (如果您无法弄清楚某些代码示例的新问题应该如何设置正确)。
适配器对象有quote method,您可以使用它来引用字符串