我的查询或语法有什么问题?

时间:2015-12-15 23:47:51

标签: php mysql

第3行和第8行告诉我我有错误。

我知道sql语法是正确的,因为我可以直接输入它并且它可以工作。

$kidID = $_POST['remkid'];

$kname = mysqli_fetch_assoc($conn, SELECT name FROM kids WHERE id=`$kidID`);

$name = $kname['name'];

if(isset($_POST['remkid'])) {
    mysqli_query($conn, DELETE FROM kids WHERE id=`$kidID`) or die ("Error: " . mysqli_error());
    echo "$name was removed from the system.";
}

这是一个包含$ conn的包含文件,我知道它也可以在我创建的其他5或6页上正常工作。

<?php
$servername = "*";
$username = "*";
$password = "*";
$dbname = "*";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
?>

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

总结评论:您没有MySQL语法错误,您有PHP语法错误。首先,mysqli_query()期望查询为字符串值,这意味着在某些时候必须用引号括起来。也就是说,

mysqli_query($conn, DELETE FROM kids WHERE id=`$kidID`)

应该是

mysqli_query($conn, "DELETE FROM kids WHERE id = $kidID")

根据kids.id的类型,您可能需要说"...WHERE id = '" . $kidID . "'"); - 请注意$kidID用引号(&#39;&#39;)括起来,而不是反引号( ``)。

其次,mysqli_fetch_assoc()根本不接受查询字符串。您需要传递一个mysqli_result对象,由mysqli_query()返回(需要带引号的字符串参数):

$result = mysqli_query($conn, "SELECT name FROM kids WHERE id=$kidID");
$kname = mysqli_fetch_assoc($result);

那就是说,另一个问题是你正在使用动态SQL查询。在有准备好的陈述时没有任何借口的东西。准备好的语句关闭了你的情况是一个巨大的SQL注入漏洞(参见How can I prevent SQL-injection in PHP?),以及自动处理变量的所有必要的引用,输入和转义。

对于SELECT,准备语句的语法将是

$sql = "SELECT name FROM kids WHERE id = ?";    // define the query
$stmt = mysqli_prepare($conn, $sql);            // compile the query
mysqli_stmt_bind_param($stmt, 's', $kidID);     // fill in the variables
$result = mysqli_stmt_execute($stmt);           // perform the query
$kname = mysqli_fetch_assoc($result);           // retrieve the result
$name = $kname['name'];

我省略了任何错误处理方法,因为我更愿意将其作为读者的练习。