查询语法问题

时间:2014-05-14 14:47:07

标签: php mysql syntax

我有一些别人写的代码。这段代码给我一个语法错误,我无法弄清楚为什么。

if (!isset($_POST['new'])) {$query.= 'WHERE `name` ="'.mysqli_real_escape_string($origName).'"';}
$query .= ';';
query($query);
$output = "Changes saved";

具体错误是:

  

您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在' WHERE name =""''在第1行

我希望有人能向我指出这一点。

感谢您的建议,但仍然得到相同的基本错误。以下是处理添加新人的代码块:

if (isset($_POST['name'])) {    // Save new/updated presenter
    $newName = mysqli_real_escape_string(htmlentities($_POST['name'],ENT_QUOTES));
    $origName = mysqli_real_escape_string(htmlentities($_POST['origName'],ENT_QUOTES));

    if (isset($_POST['new'])) {
        $query = "INSERT INTO `presenters` SET `name`='$newName'";
    } else {
        $query = "UPDATE `presenters` SET `name`='$newName'";
    }
    unset($_POST['new'], $_POST['name'], $_POST['origName']);
    foreach ($_POST as $key=>$value) {
        $key = mysql_real_escape_string($key);
        $value = mysql_real_escape_string($value);
        $query .= ", `$key`='$value'";
    }
    if (!isset($_POST['new'])) {
    $query.= "WHERE `name` ='" . mysqli_real_escape_string($db, $origName) . "'";
    }
    $query .= ';';
    query($query);
    $output = "Changes saved";

3 个答案:

答案 0 :(得分:0)

可能只需要在WHERE

前面添加一个空格
if (!isset($_POST['new'])) {$query.= ' WHERE `name` ="'.mysqli_real_escape_string($origName).'"';}

也可以是双引号,我相信MySQL在字符串周围使用单引号。

if (!isset($_POST['new'])) {$query.= " WHERE `name` ='".mysqli_real_escape_string($origName)."'";}

答案 1 :(得分:0)

清洁格式有助于清理这样的东西:

if (!isset($_POST['new'])) {
  $query.= "WHERE `name` = '" . mysqli_real_escape_string($origName) . "'";
}
$query .= ';';
query($query);
$output = "Changes saved";

首先,示例中WHERE的格式设置已关闭。我将其设置为整个查询的双引号&来自mysqli_real_escape_string($origName)的查询中的值的单引号。

但是说,mysqli_real_escape_string()格式不正确。对于过程样式,您需要将实际的DN连接(aka:link)设置为第一个参数:

string mysqli_real_escape_string ( mysqli $link , string $escapestr )

因此,您的示例中显示的mysqli_real_escape_string()需要更改为以下内容:

mysqli_real_escape_string($db, $origName)

$db实际上是更大代码结构中真正的MySQL数据库连接链接。

答案 2 :(得分:0)

虽然前两个mysqli_real_escape_string()也需要2个参数。第一个应该是你的db-link,第二个应该是需要转义的字符串。

可以在htmlentities()

中删除mysqli_real_escape_string()的使用