2017-08-18 6 views
0

私は特定のユーザーのために特殊化を追加するためにデータベースとやりとりするPhp関数に取り組んでいます。私はmysqliマルチクエリを使用してこれを達成するために行く最善の方法を考え出した。残念ながら、クエリのコードは正しく実行されていません。 db接続は問題なく動作しており、データベースのWebアプリケーションの作業に入力すると個々のクエリが実行されます。正しく表示されているにもかかわらず、Mysqliマルチクエリが機能しない

function assign_specialties($id, $specialties) { 
    $conn = new mysqli($GLOBALS['servername'], $GLOBALS['username'], $GLOBALS['password'], 'visio'); 
    if ($conn->connect_error) { 
     die("$conn->connect_errno: $conn->connect_error"); 
    } 
    $query = ""; 
    $id = mysqli_real_escape_string($conn, $id); 
    foreach ($specialties as $specialty) { 
     $specialty = mysqli_real_escape_string($conn, $specialty); 
     $query .= " INSERT INTO member_specialization (member_id, specialization_name) VALUES ('$id', '$specialty');"; 
    } 
    //$query = mysqli_real_escape_string($conn, $query); 
    if ($conn->multi_query($query)) { 
     echo "<script> alert('yes')</script>"; 
    } 
    else { 
     echo "<script> alert('$query')</script>"; 
    } 

    $conn->close(); 
} 

私はまた、セミコロンで区切られた各クエリを持っています。これは、私はそれがユーザーエラーでなければならないことを知っているので、私は複数のクエリを試したことが初めてです、私はちょうどそのエラーが何であるか把握することはできません。クエリ内のデータは適切にエスケープする必要があります

+0

「... INSERT;」先頭の空白文字を ''試し –

+0

はミスをチェックするために、あなたのSQLクエリからエコー結果 –

+0

てみて何も変更されていないよう。エコーに何も見えない場合は、エコーされたクエリをdb(phpmyadmin)に直接コピーしてSQLエラーを除外して実行してみてください。 –

答えて

0

http://php.net/manual/en/mysqli.multi-query.php

クエリ全体でmysqli_real_escape_string()を使用していますが、エスケープする必要がある文字列は変数$ specialtyだけです。

さらに、プロシージャスタイルとオブジェクト指向スタイルの両方を使用しています。どちらのスタイルを好むかは、一貫していることをお勧めします。

$query = ""; 
foreach ($specialties as $specialty) { 
    $specialty = mysqli_real_escape_string($conn, $specialty); 
    $query .= "INSERT INTO member_specialization 
       (member_id, specialization_name) 
       VALUES 
       ('$id', '$specialty');"; 
} 

mysqli_multi_query($conn, $query); 
+0

これはまさに答えでした。 xycf7のコメントも正しい。 –

関連する問題