2013-10-23 65 views
0

新的PHP和我就讀的課程,這樣可以問老師,明天如果這是比我想這可能是更復雜!查詢多個列的PHP/MySQL

我有一個SQL查詢,並能正常工作。但我試圖在select語句中添加'and'。

這是我在一分鐘

$query = "SELECT * from table1 where table1.age <= " . $_POST['min_age'] ; 

我有我的鏈接的HTML頁面上的「區域」輸入想要的結果僅被退回,如果MIN_AGE和區域值匹配那些由用戶輸入。

我已經嘗試添加一個「何」,但它不工作,我不知道這是否是因爲多「的,或者什麼,我試圖做需要不同的方法嗎?

感謝

+0

它不應該是「和where」。你可以發佈你有的當前查詢(有多個wheres或類似的東西)? – Maximus2012

+0

WHERE列=東西ADN someothercolumn =東西 – Mihai

+0

你只需要使用「其中」在一次查詢。其中,x = y和x> 4 – Billy

回答

2

如果需要多個條件,只是他們AND分開:

... WHERE table1.age <= ? AND table1.region = ? 

無需再使用WHERE就像你不需要使用超過一次,如果你正在編寫一個if()更多。併發症前提條件在PHP中。


PS:這是不直接關係到你的問題,但你應該進入的把$ _POST或$ _GET變量,直接進入您的SQL查詢的習慣。這是被黑客入侵的好方法!詢問您的導師關於「SQL注入」,或閱讀我的演示文稿SQL Injection Myths and Fallacies

我知道你剛剛起步的,但如果你是訓練成爲一名電工,你將學習如何避免觸電或如何避免引起火災高優先級。

下面我將如何使用的mysqli寫您的查詢。使用查詢參數的一個優勢是您永遠不必擔心您開始和結束引號的位置。

$query = "SELECT * from table1 where table1.age <= ? AND table1.region = ?"; 
$stmt = $mysqli->prepare($query) or trigger_error($mysqli->error, E_USER_ERROR); 

$stmt->bind_param("is", $_POST["min_age"], $_POST["region"]); 
$stmt->execute() or trigger_error($stmt->error, E_USER_ERROR); 

我在這裏展示的另一個好習慣是總是報告,如果準備()或執行()返回一個錯誤。


如果你一定要插變量到SQL,首先要確保你的,或者通過使用像mysqli_real_escape_string適當避開功能()保護的變量或者由值強迫爲整數。 不要直接將$ _POST變量放入字符串中。如果使用PHP語法直接在雙引號字符串中嵌入變量,則不必停止並重新啓動引號:

$age = (int) $_POST["min_age"]; 
$region = $mysqli->real_escape_string($_POST["region"]); 
$query = "SELECT * from table1 where table1.age <= {$age} 
    AND table1.region = '{$region}'"; 
+0

好,謝謝之前,但我想,太 - ?所以我需要開始與「之後再次[min_age]之前和? – DJC

+0

好的謝謝,我會問這個!現在雖然(因爲這只是我做的一個測試,它不會現場)我將如何添加和沒有「互相干擾? – DJC