2017-09-15 111 views
0

我的作品是插入記錄在MySQL數據庫中mysql的PHP插入多行

if (isset($_POST['horaseguinte'])){ 
    $horaseguinte = $_POST['horaseguinte']; 
    $sql="INSERT INTO reservas (cod, data, hora, user, reservas, pc, colunas, outros, sala) VALUES (NULL, '$mydate', '$hora1', '$userid', '$proj', '$pc', '$col', '$outros', '$sala'),(NULL, '$mydate', '$horaseguinte', '$userid', '$proj', '$pc', '$col', '$outros', '$sala')"; 
}else{ 
    $horaseguinte=""; 
    $sql="INSERT INTO reservas (cod, data, hora, user, reservas, pc, colunas, outros, sala) VALUES (NULL, '$mydate', '$hora1', '$userid', '$proj', '$pc', '$col', '$outros', '$sala')"; 
} 
if (!mysqli_query($con,$sql)) 
    { 
     $erro = true; 
     $erromessage = "Error: " . mysqli_error($con); 
    } 
$id = mysqli_insert_id($con); 
mysqli_close($con); 
} 

然而現在,在$指明MyDate變量可以有進來的數組數值的代碼。例如:Array([0] => 2017-09-20 [1] => 2017-09-27 [2] => 2017-10-04 [3] => 2017-10-11) 因此,考慮到數組存儲在$一個,我改變了代碼如下:

if (isset($_POST['horaseguinte'])){ 
    $horaseguinte = $_POST['horaseguinte']; 
    for($i = 0; $i < count($a); $i++) { 
     $sql.="INSERT INTO reservas (cod, data, hora, user, reservas, pc, colunas, outros, sala) VALUES (NULL, '$a[$i]', '$hora1', '$userid', '$proj', '$pc', '$col', '$outros', '$sala'),(NULL, '$a[$i]', '$horaseguinte', '$userid', '$proj', '$pc', '$col', '$outros', '$sala')"; 
    } 
}else{ 
    $horaseguinte=""; 
    for($i = 0; $i < count($a); $i++) { 
     $sql. = "INSERT INTO reservas (cod, data, hora, user, reservas, pc, colunas, outros, sala) VALUES (NULL, '$a[$i]', '$hora1', '$userid', '$proj', '$pc', '$col', '$outros', '$sala')"; 
    } 
} 

if (!mysqli_multi_query($con,$sql)) 
    { 
     $erro = true; 
     $erromessage = "Error: " . mysqli_error($con); 
    } 
$id = mysqli_insert_id($con); 

mysqli_close($con); 
} 

但如果返回以下錯誤:

Catchable fatal error: Object of class mysqli_result could not be converted to string in /home/louros/public_html/material/add_reserva_savemef.php on line 115

如果有人可以幫助我將不勝感激!

+1

提及代碼中的'115行' –

+0

您的代碼也容易受到SQL注入的影響,請使用準備好的語句來避免它。 –

+1

請注意,'mysqli_multi_query'的返回值只是第一個查詢的成功。您需要使用循環才能獲得每個查詢的成功。我強烈建議不要使用多重查詢,這會讓事情變得更加複雜。 – Barmar

回答

1

您必須用分號結束查詢。從mysqli_multi_query功能的描述:

Executes one or multiple queries which are concatenated by a semicolon.

因此,例如,你的4號線將成爲:

$sql.="INSERT INTO reservas (cod, data, hora, user, reservas, pc, colunas, outros, sala) VALUES (NULL, '$a[$i]', '$hora1', '$userid', '$proj', '$pc', '$col', '$outros', '$sala'),(NULL, '$a[$i]', '$horaseguinte', '$userid', '$proj', '$pc', '$col', '$outros', '$sala');"; 

此外,由於Barmar指出,考慮使用mysqli_query的單個呼叫,每次查詢。這樣你可以驗證每個人的成功。

不嚴格相關但相關:不要直接在查詢中插入$ _POST值。永遠。這是一個SQL注入漏洞的最簡單的例子。有幾種方法可以解決這個問題,但是real_escape_string是一個很好的開始。