2016-09-22 18 views
0

PHP内でSQLクエリを書くのは本当に嫌です。 PHPの次の例ピースを考えると

:私は代わりに、それ自身のファイル内のSQLクエリを記述したいとは、(あるいは)したい

script.php

$name = 'Bill' 
$query = "SELECT * FROM a_table WHERE name='$name'"; 

ます私のスクリプトに内容:

query.sql

SELECT * FROM a_table WHERE name='$name' 
私は、SQLクエリ内でPHPの変数を参照できるようにしたいと思い

script.php

// This doesn't work obviously 
$query = '"'.include('query.sql').'"'; 

注意(例:$名はセットアップscript.phpに宣言されていますがの一部として使用されていますクエリ)。

+0

このようなクエリを書くときは、SQLインジェクションに注意してください。参照してください:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1 –

+0

@ピエール - LoupPagniezそのリンクをありがとう。私の場合、すべてのユーザー入力は、クエリで使用される前に別々に消去されていましたが、添付の質問/回答は素晴らしいです –

答えて

3

いいとシンプルなソリューション:

$sql = file_get_contents("query.sql"); 

と変数を参照するために、私はあなたがこの

$query = $db->query("SELECT x FROM x WHERE x = :example") 
$query->execute(array("example"=>$value)); 

のように参照する場所PDOを使用することをお勧めし...しかし、あなたはmysqliの中で次のような何かを行うことができますなど

1

query.sql:

SELECT * FROM a_table WHERE name=:name 

script.php:

$query = file_get_contents('path/to/query.sql'); 

次にパラメータをバインドしてクエリを実行します。

なぜ変数をクエリ文字列に連結するのではなく、バインドする必要があるのか​​についてはHow can I prevent SQL-injection in PHP?を参照してください。

関連する問題