2017-09-15 8 views
0

私は、$ MyDateに該当する変数が配列で来て、いくつかの値を持つことができ、しかし、今の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); 
} 

にレコードを挿入し、その動作するコードを持っています。例:Array([0] => 2017-09-20 [1] => 2017-09-27 [2] => 2017-10-04 [3] => 2017-10-11) 誰かが私には理解されることができた場合

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

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

しかし、戻りの場合、次のエラー:配列が、私はこれにコードを変更し、$ aに保存されています!

+1

あなたのコードに 'line 115'と書かれています –

+0

あなたのコードはSQLインジェクションにも脆弱です。 –

+1

'mysqli_multi_query'の戻り値は最初のクエリの成功だけです。すべてのクエリの成功を得るには、ループを使用する必要があります。私はマルチクエリを使用することを強くお勧めします。 – Barmar

答えて

1

クエリをセミコロンで終了する必要があります。 mysqli_multi_query機能の説明から:

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

だから例えば、あなたの第四行はなる​​:

$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が良い方法です。

関連する問題