Php mysql\u real\u escape\u字符串返回空白的奇怪问题
我正在创建一个magento模块,并在控制器中尝试生成一个查询。 例如:Php mysql\u real\u escape\u字符串返回空白的奇怪问题,php,mysql,magento,Php,Mysql,Magento,我正在创建一个magento模块,并在控制器中尝试生成一个查询。 例如:“插入”$resource->getTableName('mymod/mymodtable')。“SETpid=”。mysql\u real\u escape\u string($pp['id'])。“” 在我的本地设置中,这工作正常,我在pid中获得了预期的id。但一旦我把它上传到我的服务器上,那部分就变成了空白。我知道数据库连接存在,因为它在服务器上插入了一个带有空白pid的新行。我尝试了var\u dump,它确实证明
“插入”$resource->getTableName('mymod/mymodtable')。“SET
pid=”。mysql\u real\u escape\u string($pp['id'])。“”代码>
在我的本地设置中,这工作正常,我在pid
中获得了预期的id
。但一旦我把它上传到我的服务器上,那部分就变成了空白。我知道数据库连接存在,因为它在服务器上插入了一个带有空白pid
的新行。我尝试了var\u dump
,它确实证明了$pp['id']
具有该值,但mysql\u real\u escape\u string
返回空白。我还尝试了mysqli\u real\u escape\u string
,但什么都没有。有什么想法吗?您正在使用哪个数据库界面mysql\u real\u escape\u string
应仅与mysql\u query
一起使用,如果可以避免,则不应使用该接口。如果没有有效的连接,它可能无法正常工作
使用mysqli
时,您应该使用参数化查询,并将用户数据添加到查询中。手动调用转义函数通常是错误的
如果您使用的是Magento,您可能想看看如何使用Magento数据库层。因此,您可能没有“数据库连接”
经常令人困惑的是,当mysql\u real\u escape\u string
文档谈到数据库连接时,它们具体指的是使用该函数打开的数据库连接
如果您使用Magento的标准对象与数据库通信,那么您没有mysql\u connect
连接,您有一个(通过)。PDO旨在鼓励参数化查询
那么,你的选择在这里
按照流程,使用参数化查询字符串构建查询。(如果您不知道如何使用一些代码示例解决新问题)
适配器对象具有一个可用于引用字符串的
您的web服务器日志中有错误吗?现在是将代码更新为占位符的好时机!虽然,这是一个相当。。古怪的问题如果报告的行为是准确的,我唯一能想到的就是服务器的设置已损坏或已损坏。观察到$pp['id']
的哪些值失败?您是否在转义后立即观察到“空白”(使用var\u dump
)?有一些最小的代码来复制/观察行为(并且,你能把这样一个最小的测试用例作为一个精确的复制粘贴代码块发布吗)?@helion3没有,没有errors@user2864740嗯,因为即使我不能在服务器外复制它,我也不能给出一个测试块。但是,$pp
中的任何和所有类型的值都失败了,甚至硬编码的值也失败了。@user279988不,我的意思是,我想看看您正在使用的实际代码(对于mysql和mysqli表单)来显示和验证结果。。我使用的是mysql
,而mysqli\u real\u escape\u string
只是一个排除这种情况的测试。但我不明白的是,它是如何在我的本地设置上工作的,而不是在服务器上工作的?您是使用MySQL数据库还是专门使用MySQL查询?Magento有自己的数据库层,您应该尽可能使用它。谢谢,我尝试使用预先准备好的语句,如$writecon->query($qry,array('id'=>$pp['id']))
,这很好,但仅使用此方法无法传递包含许多特殊字符的字符串类型值,例如同时包含单qoutes和双qoutes的字符串,因此,mysql\u real\u escape\u string
基本上是我的懒人保存精确值的方法。如果我想手动编写查询,magento的替代方案是什么?@user279988是的,实际上,你可以。其思想是使用查询
函数,绑定参数会自动转义。这样你就不必担心逃逸了,系统会帮你处理。试试看。