我正在使用這個sql查詢作爲PHP腳本的一部分來接受用戶輸入(應用於變量$ condition1- $ condition4),並將其與MySQL數據庫進行比較並返回相關結果。SQL查詢'WHERE EXISTS'如果列返回空
我的問題是,並非網站上的所有表單都輸出$ condition4值,因此它並不總是輸入到腳本/查詢中。
我試過在SQL查詢中使用EXISTS謂詞,但無法讓它工作。
下面是該查詢,因爲我有它的工作:
$sql = "SELECT columnXYZ
FROM table_1
WHERE condition1 = '" .$condition1."'
and condition2 = '" .$condition2."'
and condition3 = '" .$condition3."'
and condition4 = '".$condition4."'";
我需要確定是否$ condition4是我運行查詢之前或輸入有使用WHERE的方式EXISTS謂詞來實現這一目標?
整個腳本:(的var_dump看到查詢的結果)
<?php
$condition1 = $_POST['condition1'];
$condition2 = $_POST['condition2'];
$condition3 = $_POST['condition3'];
$condition4 = $_POST['condition4'];
$dbhost = 'localhost';
$dbuser = 'admin';
$dbpass = 'pwd';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn)
{
die('Could not connect: ' . mysql_error());
}
$sql = "SELECT columnXYZ
FROM table_1
WHERE condition1 = '" .$condition1."'
and condition2 = '" .$condition2."'
and condition3 = '" .$condition3."'
and condition4 = '".$condition4."'";
mysql_select_db('database_1');
$retval = mysql_query($sql, $conn);
if(! $retval)
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
$columnXYZ = $row['columnXYZ'];
var_dump($columnXYZ);
}
mysql_close($conn);
?>
當$ condition4輸入的查詢工作正常,作爲一個變通的形式沒有一個$ condition4我有剛剛指向一個類似的PHP腳本,刪除了$ condition4。
澄清我的問題:我可以在SQL查詢中使用EXISTS謂詞來確定輸入是否有值,或者是否需要事先使用PHP或其他某種方法執行此操作?
請參閱[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)和[MySQL的棄用(http://php.net/manual/en/migration55.deprecated .PHP)。另外[MySQLi](http://php.net/manual/en/book.mysqli.php) –
此代碼對SQL注入黑客開放。當您將數據(例如:GET,POST等)放入查詢中時,必須對其進行消毒。請使用PDO和參數化查詢來查找,以防止人們攻擊您的代碼。 – TravisO
[你需要防止SQL注入!](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) 請[停止使用'mysql_ *'函數](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。他們不再被維護,並[正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。瞭解[準備的陳述](http://en.wikipedia.org/wiki/Prepared_statement),並使用[PDO](http://jayblanchard.net/demystifying_php_pdo.html)。 –