提问者:小点点

使用循环[closed]将4个数组值插入MySQL


我在将数组值插入DB表时遇到了一个问题,我定义了4个数组,我试图使用for loop插入这些数组值,结果出现了以下错误:

错误

下面是我的代码:

<?php

$servername = "localhost";
$username = "root";
$password = "12345678";
$db_name = "blooddonation";

//////////////////////*********** Blood Donation System **************//////////////////////


//Create Connection
$conn = new mysqli($servername, $username, $password, $db_name);
//Check Connection
if($conn -> connect_error){
    die("Connection falied :(". $conn -> connect_error."<br>");
}else {
    
    echo "Connection Success! :)"."<br>";
    
    //Insert patient's Info
    $Names = array("Ahmad", "Abdullah", "Hashim", "Rahaf", "Jood", "worood", "Heba", "Hamza", "Fatima", "Danea");
    
    $Hospital = array("Istishari Hospital", "Ibn AlHaytham Hospital", "Islamic Hospital", "Palestine Hospital",
                      "Istiklal Hospital", "Jordan Hospital", "Al Khalidi Hospital", "Amman Surgical Hospital", 
                      "Shmaisani Hospital", "Al-Essra Hospital");
                      
    $bType = array("AB+", "O-", "A-", "B+", "AB-", "B-", "A+", "O+", "AB+", "B+");
    
    $Status = array("Emergency", "Normal", "Normal", "Emergency", "Emergency", "Normal", "Normal", "Normal", "Emergency","Normal");
    $Pass = "12345678";

    for($i = 0; $i < 10; $i++){
        
        
        $sql1 = "INSERT INTO patients (name, password, hospital, bloodType, status) VALUES ($Names[$i], $Pass, $Hospital[$i], $bType[$i], $Status[$i])";        
        if($conn -> multi_query($sql1) == TRUE){
            
            echo "Patient's Info Inserted Successfuly :)"."<br>";
        }else{
            
            echo "Error: ".$sql1."<br>".$conn -> error."<br>";
        }
    }//End of for loop

}


//Close Connection
$conn -> close();


?>

那么我该如何解决这个问题呢?


共2个答案

匿名用户

您有错误,因为您的字符串值没有用引号括起来。

另一件要考虑的事情是使用准备好的语句。 请尝试遵循以下指南:https://www.w3schools.com/php/php_mysql_prepared_statements.asp

您还应该考虑以批量方式插入数组值,而不是1乘1。 这里有一篇很好的文章可以参考:PDO Prepared Inserts multiple rows in single query

匿名用户

您可以在Php中尝试准备好的语句,非常有用。 它会是这样的:

$bdd = new PDO('mysql:host='.$servername.';dbname='.$db_name.';charset=utf8mb4', $username, $password, [
    \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
]);
$req = $bdd->prepare('INSERT INTO patients (name, password, hospital, bloodType, status) VALUES(:name, :password, :hospital, :bloodtype, :status)');
$req->execute(array(
    'name' => $Names[$i],
    'password' => $Pass,
    'hospital' => $Hospital[$i],
    'bloodtype' => $bType[$i],
    'status' => $Status[$i]
));