如何从mysqli_fetch_array传递我的查询值?

时间:2016-04-28 03:16:17

标签: php

我正在尝试将值插入数据库中的表中。第一个参数是非空变量,接下来的两个是我想要传入的两个列。我的逻辑在这里有什么问题。

$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);

 }

2 个答案:

答案 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()功能的更多信息。