最初我遇到了这个错误
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 条件给我带来了麻烦。我对它进行了硬编码,然后将其完全取出,它做了我想要它做的事情。我认为我的报价有问题?我不认为我应该在数值周围加上引号,但我认为变量是不同的情况。有人可以帮我吗?
最佳答案
从这里的代码块来看,错误是在一个或另一个 UPDATE 查询中引发的,因为您在将其设置为数组后在这些查询中重用了 $row
代码中第四行的字符串或 NULL:
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()
函数就变得非常有用。
关于mysql - 我的 SQL 语法有什么问题(关于引号或其他问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23097748/