2012-03-04 19 views
-1

私の問題がわかりません。 4行目でエラーが発生します。PHP/SQL解析エラー

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

私はそれが4行ではないと仮定していると仮定します。私は何かを逃しているのですか?引用されたキーを持つ要素を正しく構文解析するために巻き毛の構文を使用する必要が

$id = $_GET['id']; 

     $query = "UPDATE todo_item2 
        SET todo = $_POST['i'], 
         percent = $_POST['p'], 
         due_date = $date 
        WHERE todo_id = :id"; 

     $query2 = "UPDATE todo_category2 
        SET category = $_POST['c'] 
        WHERE todo_id = :id"; 

    $id = $_GET['id']; 

    $statement1 = $db->prepare($query); 
    $statement1 -> execute(array(
     'id' =>$id, 
    )); 

    $statement2 = $db->prepare($query2); 
    $statement2 -> execute(array(
     'id' =>$id, 
    )); 
+0

IDを正しく準備していますが、他のフィールドは正しく準備していませんか?入力したユーザーデータをSQL文字列で直接使用しないでください。 – Marc

+0

テストケースを作成してください。問題の分離はデバッグの基本であり、ここで尋ねる前に何もしていないようです。 –

+0

"エスケープ"を適用せずに$ _POSTから直接SQLクエリにデータを配置すると、$ _POSTデータにあるSQL構文を実行しようとしますが、これは見つけたもののようなエラーにつながりますが、ハッカーがあなたのウェブサイトを引き継ぐことがしばしばあります。あなたは本当にこれを研究する時間を費やす必要があります。あなたが正しいことを確実にしていることを絶対に確かめるためです。 –

答えて

1

アレイ:http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing

次のコードは動作するはずです:

$query = "UPDATE todo_item2 
       SET todo = {$_POST['i']}, 
        percent = {$_POST['p']}, 
        due_date = $date 
       WHERE todo_id = :id"; 

    $query2 = "UPDATE todo_category2 
       SET category = {$_POST['c']} 
       WHERE todo_id = :id"; 

とにかく、セキュリティを考慮すると、それは恐ろしい考えですあなたのSQLクエリの中に直接配列要素を使用するには、$_POST

+0

そこに必要なことはわかっていませんでした。ありがとうございました。私のデータはこの点の前にチェックされていますが、それが有効でない場合はこの時点までは到達しませんが、より安全な方法に変更します。助けてくれてありがとう! –

1

ブラケットを使用して配列アクセスカプセル化:だから{$_POST['i']}$_POST['i']を変更

を:あなたはすでにあなたもバウンドのparamsに更新された値を移動する必要がありプリペアドステートメントを使用していることを考えると

$id = $_GET['id']; 

$query = "UPDATE todo_item2 
       SET todo = {$_POST['i']}, 
        percent = {$_POST['p']}, 
        due_date = $date 
       WHERE todo_id = :id"; 

$query2 = "UPDATE todo_category2 
       SET category = {$_POST['c']} 
       WHERE todo_id = :id"; 

$id = $_GET['id']; 

$statement1 = $db->prepare($query); 
$statement1 -> execute(array(
    'id' =>$id, 
)); 

$statement2 = $db->prepare($query2); 
$statement2 -> execute(array(
    'id' =>$id, 
)); 
2

-

$query = "UPDATE todo_item2 
       SET todo = :todo, 
        percent = :percent, 
        due_date = :date 
       WHERE todo_id = :id"; 

    $query2 = "UPDATE todo_category2 
       SET category = :category 
       WHERE todo_id = :id"; 

$id = $_GET['id']; 

$statement1 = $db->prepare($query); 
$statement1 -> execute(array(
    'todo' => $_POST['i'] 
    'id' =>$id, 
    'percent' => $_POST['p'], 
    'date' => $date 
)); 

$statement2 = $db->prepare($query2); 
$statement2 -> execute(array(
    'id' =>$id, 
    'category' => $_POST['c'] 
));