2017-03-08 4 views
0

エラーですので、私は3テーブルにデータを挿入しようとした:SQLエラー他の2がブリッジ

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1

任意のより良い方法はありますか?

$insertSQL = sprintf("INSERT INTO booking (book_id,book_start_rent,book_end_rent,book_total,staff_id) VALUES (%s, %s, %s, %s, %s)", 
         GetSQLValueString($_POST['book_id'], "text"), 
         GetSQLValueString($_POST['book_start_rent'], "date"), 
         GetSQLValueString($_POST['book_end_rent'], "date"), 
         GetSQLValueString($_POST['book_total'], "double"), 
         GetSQLValueString($_POST["state2"], "text") 

         /"INSERT INTO car_booking (car_id, book_id) VALUES (%s, %s)", 
              GetSQLValueString($_POST['state'], "text"), 
              GetSQLValueString($_POST['book_id'], "text") 

          /"INSERT INTO member_booking (mem_id, book_id) VALUES (%s, %s)", 
           GetSQLValueString($colname_information2, "text"), 
           GetSQLValueString($_POST['book_id'], "text") 

          ); 

編集:セミコロンを入れようとしました。インサートの終わりに、エラーが発生しましたsyntax error, unexpected ';'

$insertSQL = sprintf("INSERT INTO booking (book_id,book_start_rent,book_end_rent,book_total,staff_id) VALUES (%s, %s, %s, %s, %s)", 
         GetSQLValueString($_POST['book_id'], "text"), 
         GetSQLValueString($_POST['book_start_rent'], "text"), 
         GetSQLValueString($_POST['book_end_rent'], "text"), 
         GetSQLValueString($_POST['book_total'], "double"), 
         GetSQLValueString($_POST["state2"], "text"); 

         "INSERT INTO car_booking (car_id, book_id) VALUES (%s, %s)", 
              GetSQLValueString($_POST['state'], "text"), 
              GetSQLValueString($_POST['book_id'], "text"); 

          "INSERT INTO member_booking (mem_id, book_id) VALUES (%s, %s)", 
           GetSQLValueString($colname_information2, "text"), 
           GetSQLValueString($_POST['book_id'], "text"); 

          ); 

編集2:私は最終的に挿入することができますが、PDO

Cannot add or update a child row: a foreign key constraint fails (car rental booking . member_booking , CONSTRAINT FK__member FOREIGN KEY (mem_id) REFERENCES member (mem_id) ON DELETE CASCADE ON UPDATE CASCADE)

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) { 
           $insertSQL = sprintf("INSERT INTO booking (book_id,book_start_rent,book_end_rent,book_total,staff_id) VALUES (%s, %s, %s, %s, %s)", 
                GetSQLValueString($_POST['book_id'], "text"), 
                GetSQLValueString($_POST['book_start_rent'], "text"), 
                GetSQLValueString($_POST['book_end_rent'], "text"), 
                GetSQLValueString($_POST['book_total'], "double"), 
                GetSQLValueString($_POST["state2"], "text")); 

       $insertSQL2 = sprintf("INSERT INTO car_booking (car_id, book_id) VALUES (%s, %s)", 
            GetSQLValueString($_POST['state'], "text"), 
            GetSQLValueString($_POST['book_id'], "text") ); 

            $insertSQL3 = sprintf("INSERT INTO member_booking (mem_id, book_id) VALUES (%s, %s)", 
             GetSQLValueString($colname_information2, "text"), 
             GetSQLValueString($_POST['book_id'], "text") ); 
+0

**生成された** SQLにエラーがあります。それを最初に見てください。 –

+0

1つのクエリで1つの挿入を実行できます(マルチクエリenvを使用しない場合)。あなたは3つの分離した挿入を実行する必要があります...エラーは単純にあなたが持っていないです。 (セミコロン)を挿入します。 – scaisEdge

+0

1)mysqliのmulti_queryを使用していない限り、同じクエリで3つの挿入をすべて行うことはできません。それらを分けてください。 2)あなたはSQLインジェクションのためにオープンしています。 PDOまたはmysqliを使用していることを確認し、プリペアドステートメントとパラメータバインドを使用してください。 – aynber

答えて

0

あなたが使用することができている新しいエラーがあります:

// init PDO connection 
$db = new PDO('mysql:host=localhost;dbname=testdb;', 'username', 'password'); 
$sql1 = "INSERT INTO booking (book_id, book_start_rent, book_end_rent, book_total, staff_id) VALUES (:book_id, :book_start, :book_end_rent, :book_total, :staff_id)"; 
$prepared1 = $db->prepare($sql); 
$result1 = $prepared->execute(
    array(
     ':book_id' => GetSQLValueString($_POST['book_id'], "text"), 
     ':book_start' => GetSQLValueString($_POST['book_start_rent'], "date"), 
     ':book_end_rent' => GetSQLValueString($_POST['book_end_rent'], "date"), 
     ':book_total' => GetSQLValueString($_POST['book_total'], "double"), 
     ':staff_id' => GetSQLValueString($_POST["state2"], "text"), 
    ) 
); 
// and so on for each of your 3 queries 
+1

パラメータバインディングを使用する場合は、getSQLValueStringを使用する必要はありません。 – aynber

+0

それはそれがそれはSQLインジェクションだと仮定しているが、それは何かの私は何かの私は関数に何がわからない –

+0

それはほとんどすべてです。 http://stackoverflow.com/questions/4458180/php-getsqlvaluestring-function – aynber