2016-09-22 112 views
0

我真的不喜歡在我的PHP中編寫SQL查詢。

考慮下面的實例篇PHP的:

的script.php

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

我想,而不是寫SQL查詢在它自己的文件,包括(或其他方式)獲得內容到我的腳本:

query.sql的

SELECT * FROM a_table WHERE name='$name' 

的script.php

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

注意,我希望能夠在SQL查詢中引用的PHP變量(如:$ name是建立在script.php的聲明,但作爲部分查詢)。

+0

在編寫這樣的查詢時注意SQL注入。請參閱:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1 –

+0

@ Pierre-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?爲什麼您應該綁定變量而不是將它們連接到查詢字符串中。