2016-11-10 16 views
0

私のクエリには何かがありますが、何かを見つけることができません。PHPでSQLクエリの連結をデバッグするには?

$keys = array_keys($fields); 
    $values = array_values($fields); 

    $sql = "UPDATE " .$table. " SET " .implode("`, `", $keys) ."='".implode("', '", $values) . "' WHERE id={$id}"; 

そして、それはとして示していますUPDATE users SET namepassword'Rick is vets', 'sdfg' WHERE id=5

しかし、それはとして表示していますUPDATE users SET name = 'Rick is vets', password='sdfg' WHERE id=5

+0

これは、あなたが 'implode()'関数を使用しているためです。 – Maximus2012

+1

これは決してうまくいかないので、 'name = 'value''文字列を作成するために1つの配列をループする必要があります。 –

+0

申し訳ありませんが、私のimplode関数はどうしたらいいですか? –

答えて

2
$setString=''; 

foreach($fields as $k=>$v){ 

$setString .=$k." = '".$v."', "; 

} 
$setString=rtrim($setString,', '); 

クエリで$setStringが含ま

+2

* "私のクエリを見て誰かが必要です" * - 彼らはそれを修正すると言ったことはありません;-) –

+1

@ Fred-ii-私は安いポイントが必要です;-) –

+0

Ok、私は10を持っていますが、その文字列の連結にはもっとうまくいくでしょう – RiggsFolly

2

作成する$fields配列をループしてみこのような更新文字列:

$update_string=''; 

foreach ($fields as $key=>$value) 
{ 
    $update_string .= $key."='$value', "; 
} 

その後rtrim()機能を使用して文字列から最後のコンマ文字を削除します。

$update_string = rtrim($update_string, ", "); 

次に、あなたのクエリは次のようになります。

$sql = "UPDATE " .$table. " SET " .$update_string. " WHERE id={$id}"; 

これはちょうどあなたのコードの可能性があるため概念を説明することですまだ SQLインジェクション攻撃に開放されている場合、準備された ステートメントを使用する必要があります。

+0

データ値を一重引用符で囲むと便利かもしれません! – RiggsFolly

+0

@RiggsFollyはい。ありがとう。更新しました。 – Maximus2012

+0

あなたが気にしないことを願って、あなたのコードを少し修正して簡略化しました。 – RiggsFolly

関連する問題