我在将数组值插入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();
?>
那么我该如何解决这个问题呢?
您有错误,因为您的字符串值没有用引号括起来。
另一件要考虑的事情是使用准备好的语句。 请尝试遵循以下指南: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]
));