我的SQL语法出了什么问题(关于引号或其他内容)

时间:2014-04-16 02:06:36

标签: mysql sql

最初我收到了这个错误

Error: 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 '' at line 1

但我把它缩小到这段代码

    $query = "SELECT Priority FROM mathhw WHERE MHID=$row";
echo $query;
$querycon = mysqli_query($con,$query);
while($row = mysqli_fetch_row($querycon))
{
    $priority = $row[0];
    echo $priority;
}
if($priority==0)
{
    $sql="UPDATE mathhw SET Priority = 1 WHERE MHID=$row";
    if (!mysqli_query($con,$sql))
    {   
        die('Error: ' . mysqli_error($con));
    }
    header("Location: math.php");
}
else if($priority == 1)
    {
    $sql="UPDATE mathhw SET Priority = 0 WHERE MHID=$row";
    if (!mysqli_query($con,$sql))
    {   
        die('Error: ' . mysqli_error($con));
    }
    header("Location: math.php");
}

我做了一些试验和错误,似乎WHERE条件给了我麻烦。我对它进行了硬编码,然后我把它完全取出来了,它完成了我想要它做的事情。我认为我的报价有问题吗?我不认为我应该在数值周围加上引号,但我认为变量是一个不同的情况。有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

从这里的代码块中,错误是在UPDATE查询中的一个或另一个中抛出,因为在将它们设置为字符串数组或NULL后,您在这些查询中重用$row从你代码的第四行开始:

while($row = mysqli_fetch_row($querycon))
...

请参阅http://www.php.net/manual/en/mysqli-result.fetch-row.php

然后,您在此处重复使用它而不做任何修改。

...
$sql="UPDATE mathhw SET Priority = 1 WHERE MHID=$row";

鉴于以near '' at line 1结尾的语法错误,您的SELECT可能没有返回任何设置 $rowNULL,然后在您的查询中将$row替换为""

一个真正帮助我使用MySQLi的快速提示是以下功能:

http://www.php.net/manual/en/mysqli.real-escape-string.php

使用过程样式查看示例,如上面的代码:

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");

$city = "'s Hertogenbosch";

/* this query will fail, cause we didn't escape $city */
if (!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    printf("Error: %s\n", mysqli_sqlstate($link));
}

$city = mysqli_real_escape_string($link, $city);

/* this query with escaped $city will work */
if (mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    printf("%d Row inserted.\n", mysqli_affected_rows($link));
}

mysqli_close($link);
?>

最后一点:在你的WHERE子句中,如果MHID不是字符串类型列,那么你所拥有的只是正确的。例如,如果MHID是varchar,则需要将$row引用为'$row',如下所示:

$sql="UPDATE mathhw SET Priority = 1 WHERE MHID='$row'";

mysqli_real_escape_string()函数变得非常有用时。