第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());
}
?>
非常感谢任何帮助。
答案 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'];
我省略了任何错误处理方法,因为我更愿意将其作为读者的练习。