最初我收到了这个错误
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条件给了我麻烦。我对它进行了硬编码,然后我把它完全取出来了,它完成了我想要它做的事情。我认为我的报价有问题吗?我不认为我应该在数值周围加上引号,但我认为变量是一个不同的情况。有人可以帮助我。
答案 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可能没有返回任何设置
$row
至NULL
,然后在您的查询中将$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()
函数变得非常有用时。