mysql - 我的 SQL 语法有什么问题(关于引号或其他问题)

标签 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 条件给我带来了麻烦。我对它进行了硬编码,然后将其完全取出,它做了我想要它做的事情。我认为我的报价有问题?我不认为我应该在数值周围加上引号,但我认为变量是不同的情况。有人可以帮我吗?

最佳答案

从这里的代码块来看,错误是在一个或另一个 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/

相关文章:

mysql - SQL 中类似枢轴的计算

mysql - SQL : Make a sum query

MySQL SUBSTRING 使用查询的长度和位置值与检索后的编程语言子字符串

php - 用户定义的 mysql 表的 XML 输出

php - 在事件提要中对类似事件进行分组

sql - 获取 .BAT 文件或 SQLCMD 以提示用户输入

sql - 这是做什么的?

sql - 如何使用 SQL (SQL Server) 将数字列表转换为(临时)表

php - 删除第一行并将所有行向上移动

sql - 填充现有表,仅与完整文件不同