添加where子句时出错

时间:2016-03-30 02:01:17

标签: sql mysqli

这可能是一个初学者错误,但不幸的是我无法弄明白。

当我运行下面的代码时,我收到错误 'errno'=> int 1064       'sqlstate'=>字符串'42000'(长度= 5)       'error'=> string'你的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在第1行'''Caribbean \''附近使用正确的语法(长度= 159)

如果我使用“select * from Country”查询有效,但当我添加“where Region ='Caribbean'”时它不会。

$sql = "select * from Country where Region = 'Caribbean'";
$db = mysqli_init();
$db->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);
@ $db->real_connect('localhost', 'user', 'passwd', 'world');
if ($db->connect_errno) {
    echo "Failed to connect to MySQL: (". $db->connection_errno . ")".
      $mysqli->connect_error;
    exit;  
}
$sql = $db->real_escape_string($sql);
$result = $db->query($sql);
var_dump($db->error_list);
var_dump($result->fetch_all());

2 个答案:

答案 0 :(得分:0)

如果从文本文件中复制可能与脚本中的符号不​​同,则可以尝试检查引号。 在从键盘输入符号后,如果仍然出现错误,请尝试将国家/地区名称放入变量并通过引用进行调用。

答案 1 :(得分:0)

你应该只转义参数,而不是整个查询。

类似的东西:

$region = 'Caribbean';
$paramRegion = $db->real_escape_string($region);
$sql = "select * from Country where Region = '".$paramRegion."'";
$db = mysqli_init();
$db->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);
@ $db->real_connect('localhost', 'user', 'passwd', 'world');
if ($db->connect_errno) {
    echo "Failed to connect to MySQL: (". $db->connection_errno . ")".
      $mysqli->connect_error;
    exit;  
}
$result = $db->query($sql);
var_dump($db->error_list);
var_dump($result->fetch_all());