【问题标题】:PHP: cannot pass single quoted string to mysqli query [duplicate]PHP:无法将单引号字符串传递给mysqli查询[重复]
【发布时间】:2013-10-06 15:15:33
【问题描述】:

我为这个简单的事情奋斗了几个小时:

$var=var;    
$result = "SELECT column1, column2 FROM $db WHERE column3 = '$var' ";

我得到的错误是:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '\'var\'' 附近使用正确的语法

名称是正确的,它适用于 mysql 查询。认为我尝试了所有可能的引用选项,有什么问题?

更新:根据要求我使用了转义,但错误仍然相同

$var=var;   
$var = $conn->real_escape_string($var);
$result = "SELECT column1, column2 FROM {$db} WHERE column3 = '{$var}' ";

【问题讨论】:

  • 您在var 周围缺少引号。这是故意的吗?
  • 你的意思是在第一行?然后就是了。
  • 那么,var 是一个常数?如果你想存储一个字符串,那么你需要在它周围加上引号。
  • 现在它是不变的。我将其更改为 $var="var";同样的错误。
  • $var="var"; 不可能在错误消息中生成文本 \'var\'。那些\' 来自哪里?

标签: php


【解决方案1】:

一定有

$var = $mysqli->real_escape_string($var);
$sql = "SELECT column1, column2 FROM {$db} WHERE column3 = '{$var}' ";

代替:

$result = "SELECT column1, column2 FROM $db WHERE column3 = '$var' ";
$result = $mysqli->real_escape_string($result) ; //Totally wrong.

【讨论】:

  • 给我致命错误:在...中的非对象上调用成员函数 real_escape_string()
  • 所以$mysqli 不是mysqli 对象的对象?
  • 我不知道,有一些先决条件吗?
【解决方案2】:

我在 mysql 控制台中测试了一个错误的 SQL 查询:

 mysql>  SELECT column1, column2 FROM WHERE column3 = 'varvalue';

它给出了这个错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE column3 = 'varvalue'' at line 1

实际上缺少表名。我猜你的变量 $db 可能是 null/empty/unset。

请尝试:

$db = "mytable";
$var = "varvalue";
$result = "SELECT column1, column2 FROM $db WHERE column3 = '$var' ";

【讨论】:

  • 不,没有 WHERE 过滤器的查询有效
  • 我没有更好的主意然后要求您在 MySQL 查询之前回显 $result SQL 字符串?
  • 回声如预期
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 2018-07-12
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 2015-06-25
相关资源
最近更新 更多