2016-07-22 8 views
0

mysqli_multi_query関数を使用して同じテーブルに複数の行を挿入しようとしていますが、最初のクエリのみを実行します。私はコンマで区切られた最初のクエリの最後に値を追加しようとしましたが、何も動作していないようです。助言がありますか?php mysqli_multi_query()は最初のクエリの後に挿入を停止します

私は準備済みのステートメントに切り替えましたが、まだ最初の結果のみが挿入されています。何か不足していますか?

$DBConnect = mysqli_connect("localhost", "root", "", "getpressed"); 

if ($DBConnect->connect_error) { 
die("Connection failed: " . $DBConnect->connect_error); 

}

$stmt = $DBConnect->prepare("INSERT INTO orderdetails (orderID, productID, quantity) VALUES (?, ?, ?)"); 
$stmt->bind_param("iii", $orderID, $productID, $quantity); 

$orderID = $orderID; 
$productID = 1; 
$quantity = $sportShirtQuantity; 
$stmt->execute(); 

$orderID = $orderID; 
$productID = 2; 
$quantity = $sportCoatQuantity; 
$stmt->execute(); 

echo "New records created successfully"; 

$stmt->close(); 
$DBConnect->close(); 
+3

**この機能は使用しないでください。それは本質的に危険です。プレースホルダ値と['bind_param']で[prepared statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)を使用してください(http://php.net/manual/en/ mysqli-stmt.bind-param.php)を使用してクエリにユーザデータを追加します。これは、2つの値のセットを持つ単一のINSERTとして、または異なるバインディングで2回実行される 'INSERT'を準備したものとして行うことができます。どちらの方法でも、あなたがここにあるよりもはるかに優れています。 – tadman

+2

これまでに提供されているすべてのダムの回答のうち、唯一のものは、@tadmanが書いたものです。それは速いです、それは簡単です、それは 'max_allowed_pa​​cket'に抵抗です、それは安全です。誰かがあなたに話すかもしれないどんな他の解決策も、準備された声明と比較して馬糞です。 –

答えて

1

orderIDには、同じorderIDを持つ複数の行を挿入できないプライマリキーインデックスがありました。私はアホです。皆さんのお手伝いをありがとうございます。 tadmanによって提案されたように、準備されたステートメントではるかに良く機能します。

-3

最後の文のオフセミコロンを削除します。ドキュメントでは、このメソッドのセミコロンは、ステートメントを連結するために使用されています。

ここにドキュメントを読む:Link

$sql = "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 1, '".$sportShirtQuantity."');"; 
$sql .= "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 2, '".$sportCoatQuantity."')"; 
+0

はそれを試しましたが、ダイスはまだありません。最初の行だけを挿入します。 – kurt

+0

また、あなたのコードを見て、手続き型PHPをO-O PHPと混合し、互換性がないため、ただ1つの規約に固執してみてください。 – Groovey

-2

私はまた、非常に将来的に書類を作成しPDOを使用することをお勧めいたしますビット

$mysqli = new mysqli("localhost", "root", "", "getpressed"); 

if ($mysqli->connect_errno) { 
    die("Connection failed: " . $mysqli->connect_error); 
} 

$sql = "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 1, '".$sportShirtQuantity."');"; 
$sql .= "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 2, '".$sportCoatQuantity."');"; 

if ($mysqli->multi_query($sql))) { 
    echo "New records created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($mysqli); 
} 
do { 
    if ($res = $mysqli->store_result()) { 
     var_dump($res->fetch_all(MYSQLI_ASSOC)); 
     $res->free(); 
    } 
} while ($mysqli->more_results() && $mysqli->next_result()); 

あなたのコードを変更しました。

+1

なぜOPは "これを試してください"? ***良い答え***は、何が行われたのか、それがなぜOPのためだけでなく、将来の訪問者のためにそうした方法で行われたのかについての説明を常に持っています。 –

関連する問題