0

クエリの何が問題なのか誰か教えてもらえますか? イベントと顧客の 2 つのテーブルがあります。顧客テーブルから顧客 ID を選択し、イベント テーブルの customer_id 列に挿入します。これは、customers テーブルのログイン ID がログインしているユーザー ID と同じ場合のみです。

$insEvent_sql = "INSERT INTO event(customer_id, videography_package, event_type, event_shortdesc, event_vanue, event_start) 
VALUES(customer-id,'".$safe_videography_package."', '".$safe_event_type."', '".$safe_event_shortdesc."','".$safe_event_vanue."',  '".$event_date."') SELECT customer_id  FROM 'customer' WHERE login_id = ".$_SESSION['SESS_LOGIN_ID'].";";
4

3 に答える 3

1
  • の構文には、行のソースとして句またはaのINSERTいずれかが必要ですが、両方は必要ありません。VALUESSELECT

  • のテーブル名に一重引用符を使用していますSELECTが、一重引用符は文字列リテラルまたは日付リテラルにのみ使用されます。

  • クエリパラメータを使用していないため、引用符で囲まれた変数を管理するための醜いコードがあります。私は$safe_あなたが変数をエスケープしたことを意味すると思います、それで少なくともあなたはSQLインジェクションの機会が少ないかもしれません。

私はこのようにPDOでステートメントを書きます:

$cust_sql = "SELECT customer_id FROM customer WHERE login_id = :login_id";
$stmt = $pdo->prepare($cust_sql);
// test if $stmt is false
$result = $stmt->execute(array(":login_id" => $_SESSION['SESS_LOGIN_ID']));
// test if $result is false
while ($row = $result->fetch()) {
  $customer_id = $row["customer_id"];
}

$insEvent_sql = "INSERT INTO event(customer_id, videography_package, event_type,
    event_shortdesc, event_vanue, event_start) 
  VALUES (:customer_id, :videographer_package, :event_type, 
   :event_shortdesc, :event_vanue, :event_start)";
$stmt = $pdo->prepare($cust_sql);
// test if $insEvent_stmt is false
$result = $insEvent_stmt->execute(array(
  ":customer_id"         => $customer_id,
  ":videographer_package"=> $videography_package,
  ":event_type"          => $event_type,
  ":event_shortdesc"     => $event_shortdesc,
  ":event_vanue"         => $event_vanue,
  ":event_start"         => $event_date
));
// test if $result is false
于 2013-01-24T23:45:18.460 に答える
1

これを試して

   $insEvent_sql = "INSERT INTO event(customer_id, videography_package, event_type, event_shortdesc, event_vanue, event_start) 
   VALUES((select customer-id from 'customer' WHERE login_id = ".$_SESSION['SESS_LOGIN_ID']."),'".$safe_videography_package."', '".$safe_event_type."', '".$safe_event_shortdesc."','".$safe_event_vanue."',  '".$event_date."') ";
于 2013-01-24T23:39:14.297 に答える
0

INSERT行の後にSELECT. 回避策は、行をに追加することSELECTです:

$insEvent_sql = "INSERT INTO event 
            (customer_id, 
             videography_package, 
             event_type, 
             event_shortdesc, 
             event_vanue, 
             event_start) 
SELECT 'customer-id'                        AS customer_id, 
       '" . $safe_videography_package . "'  AS videography_package, 
       '" . $safe_event_type . "'           AS event_type, 
       '" . $safe_event_shortdesc . "'      AS event_shortdesc, 
       '" . $safe_event_vanue . "'          AS event_venu, 
       '" . $event_date . "'        AS event_start 
UNION ALL 
SELECT customer_id, NULL, NULL, NULL, NULL, NULL
FROM   customer 
WHERE  login_id = " . $_SESSION['SESS_LOGIN_ID']; 

サンプルデータの使用:

$safe_videography_package = 'package1';
$safe_event_type = 'タイプ1';
$safe_event_shortdesc = '簡単な説明';
$safe_event_vanue = 'いくつかのイベント';
$event_date = '2012-05-05';
$_SESSION['SESS_LOGIN_ID'] = 1;

生産します:

INSERT INTO イベント
            (顧客ID、
             videography_package、
             イベントタイプ、
             event_shortdesc,
             event_vanue,
             event_start)
「customer-id」を customer_id として選択し、
       'package1' AS videography_package,
       'type1' AS event_type,
       「簡単な説明」 AS event_shortdesc,
       「いくつかの venu」 AS event_venu,
       '2012-05-05' AS event_start
ユニオンオール
SELECT customer_id、NULL、NULL、NULL、NULL、NULL
お客様から
WHERE login_id = 1
于 2013-01-24T23:33:21.420 に答える