1. ホーム
  2. php

PHP の Implode だが、各要素を引用符で囲む

2023-10-04 03:44:39

質問

配列があるとします。

 $elements = array('foo', 'bar', 'tar', 'dar');

では、このように DELETE IN SQLクエリ。

 $SQL = "DELETE FROM elements
               WHERE id IN ('" . implode(',', $elements) . "')";

問題は、要素配列のidが個別に引用されていないことです。すなわち、クエリーは次のようになります。

 $SQL = "DELETE FROM elements
               WHERE id IN ('foo,bar,tar,dar');

これを修正するための最も良い、最もエレガントな方法は何でしょうか?

どのように解決するのですか?

引用符を implode の呼び出しに引用符を追加します。 implode )

$SQL = 'DELETE FROM elements
           WHERE id IN ("' . implode('", "', $elements) . '")';

これで生成されます。

DELETE FROM elements WHERE id IN ("foo", "bar", "tar", "dar")

SQLインジェクションを防ぐ最良の方法は、要素が適切にエスケープされていることを確認することです。

簡単にできることで、うまくいくはずです(しかし、私はテストしていません)。 array_map または array_walk のように、すべてのパラメータをエスケープしてください。

$elements = array();
$elements = array_map( 'mysql_real_escape_string', $elements);