我正在尝试将值插入数据库中的表中。第一个参数是非空变量,接下来的两个是我想要传入的两个列。我的逻辑在这里有什么问题。
$query = "SELECT cnum, cname FROM course WHERE specialization = '0'";
$result = mysqli_query($conn,$query);
if (!$result) die ("Database access failed: " . $conn->error);
$rows = $result->num_rows;
for ($j =0; $j<$rows;++$j) {
$row = mysqli_fetch_array($result);
$query = "INSERT INTO student_schedule VALUES ('$studentID', '$row[0]', '$row[1]', '0')";
$result = $conn->query($query);
if (!$result) die ("Database access failed: " . $conn->error);
}
答案 0 :(得分:1)
<?php
$query = "SELECT cnum, cname FROM course WHERE specialization = '0'";
$result = mysqli_query($conn,$query);
if (!$result) die ("Database access failed: " . $conn->error);
while ($row = mysqli_fetch_array($result)) {
$insertQuery = "INSERT INTO student_schedule VALUES ('" . $conn->real_escape_string($studentID) . "', '" . $conn->real_escape_string($row[0]) . "', '" . $conn->real_escape_string($row[1]) . "', '0')");
$insert = $conn->query($insertQuery);
if (!$result) die ("Database access failed: " . $conn->error);
}
?>
另外,作为一般规则,我建议你不要将MySQLi程序代码与面向对象的代码混合使用。最后,我还建议您删除错误输出$conn->error
,而是捕获错误并打印出自定义错误消息。这减少了注射攻击。
答案 1 :(得分:0)
您的代码容易受到SQL Injections的攻击,这可能是它无法正常运行的原因。
在将数据包含到SQL查询中之前,您应该转义数据:
for ($j =0; $j<$rows;++$j) {
$row = mysqli_fetch_array($result);
$query = $conn->prepare("INSERT INTO student_schedule VALUES (?, ?, ?, '0')";
$query->bind_param('iss', $studentID, $row[0], $row[1]);
$result = $query->execute();
if (!$result) die ("Database access failed: " . $conn->error);
}
您可以在PHP manual中找到有关bind_param()
功能的更多信息。