1

MySQLのクエリを作成するときは、通常、次のようなフォームを使用します。

$column= "column_name";
$query = "SELECT * FROM table_name WHERE \"".$column."\"" = \"some_value\" ";

\""の使用を避けたい場合。変数のシーケンス、この他の形式を使用できますか、それとも互換性の問題や他の問題がある可能性がありますか?

$column= "column_name";
$query = "SELECT * FROM table_name WHERE \"$column\" = \"some_value\";
4

2 に答える 2

4

どちらの場合も、あなたがしていることは問題ありませんが、いくつかの注意事項があります。

1)最初のフォームで行っているのは、文字列リテラルのような文字列を使用することです。つまり、解析がはるかに高速であるため、二重引用符の代わりに一重引用符を使用できます。

 $column = 'column_name';
 $query = 'SELECT * FROM table_name WHERE ' . $column . ' = "some_value"';

2番目の例で行っていることも問題ありません。エスケープ文字の使用を避けようとしている理由によって異なりますが、読みやすくするために行っている場合は、問題ありません。

注目に値するのは、ここで行っている方法でクエリを処理することは非推奨になっていることです。PDOを調べて、その方法で値を挿入する必要があります。

上記のコメントごとに編集-列の周囲から「」を削除しました。

于 2013-01-04T00:41:46.800 に答える
2

はい、できます。

  • 二重引用符で区切られた文字列は、PHPパーサーによって解釈されます。
  • 変数が正しく識別されていることを確認するには、中かっこで囲みます

$variable = 1;

$array = array( 1,2 );

$object = new stdclass();
$object->member = 1;

$string = "You can basically put every kind of PHP variable into the string. This can be a simple variable {$variable}, an array {$array[0]} or an object member {$object->member} even object methods.";

PHPで$variable文字通り解釈せずに処理する場合は、文字列を一重引用符で囲みます。

私がクエリに本当に使用したいもう1つの方法は、ヒアドキュメント表記です。

$sqlQuery = <<< EOQ
    SELECT 
           "field"
    FROM
           "table"
    WHERE
           "id" = '{$escapedValue}'
EOQ;

もう1つの注意:

SQLでは、値を一重引用符で区切り、テーブル名やフィールド名などの識別子を二重引用符(ANSI互換)またはバックティックで区切る必要があります `` `

于 2013-01-04T00:58:45.133 に答える