2015-04-23 48 views
1

這是我一生中做了我的第一個PHP應用程序,我本週開始學習PHP的,所以不要殺我,好嗎,?)PHP可用性「[] 查詢與MySQL

我想使用這個腳本來查找它們可在我們的數據庫中的DJ出於某種原因,當我手動輸入的區域,如:。

'regions' LIKE \'tn_tricities\' 

返回結果,但是當我進入它想:

$region = 'tn_tricities' 
... 
`regions` LIKE \'$region\' 

它不返回任何結果你的想法如何解決這個問題?或者如果我完全走錯方向,這不是檢查可用性的最佳方式,請讓我知道!

的完整代碼:

$region = $_GET['region']; 
$date = $_GET['date']; 

require "connect.php"; 
echo $region; 
$sql = 'SELECT `vendorName`, `vendorBio`, `vendorType`, `regions` FROM 
`vendors` WHERE `regions` LIKE \'$region\' AND `datesBooked` NOT LIKE 
\'$date\' AND `datesUnavailable` NOT LIKE \'$date\' '; 
+0

這是我從PHPMyAdmin的開門見山: $ SQL =「SELECT'vendorName','vendorBio','vendorType','regions','datesBooked','datesUnavailable' FROM'vendors'其中'regions' LIKE CONVERT(_utf8 \'tn_tricities \'USING latin1)COLLATE latin1_swedish_ci AND'datesBooked'不像CONVERT(_utf8 \'05012015 \'使用latin1)COLLATE latin1_swedish_ci AND'datesUnavailable'不像CONVERT(_utf8 \'05012015 \'使用latin1) COLLATE latin1_swedish_ci'; 當我將外部引號改爲雙引號時,它不會返回任何結果。 如果你想看看這個網站它是fiestausa.com –

+0

這個作品: $ region ='tn_tricities'; echo $ region; 需要「connect.php」; echo $ region; $ sql ='選擇'vendorname','vendorBio','vendorType','regions','datesBooked','datesUnavailable' FROM'vendors' WHERE' regions' LIKE \'tn_tricities \'AND'datesBooked' NOT LIKE \'05012015 \'和'datesUnavailable' \ NOT LIKE \'05012015 \'; $ result = mysql_query($ sql); while($ row = mysql_fetch_array($ result)){ echo'

'.$row["vendorName"]."
「。' 「; } 但是現在我將其更改爲雙引號,它不返回任何結果。 :( –

回答

0

試試這個,

$region = $_GET['region']; 
$date = $_GET['date']; 

require "connect.php"; 
echo $region; 

$sql = "SELECT `vendorName`, `vendorBio`, `vendorType`, `regions` FROM `vendors` WHERE `regions` LIKE '$region' AND `datesBooked` NOT LIKE '$date' AND `datesUnavailable` NOT LIKE '$date' "; 
$result = mysql_query($sql); 

希望這個作品。

+0

這工作:$ region ='tn_tricities'; echo $ region; require「connect.php」; echo $ region; $ sql ='SELECT vendorName,vendorBio,vendorType,regions,datesBooked,datesUnavailable FROM vendors WHERE regions LIKE \ 'tn_tricities \'和datesBooked NOT LIKE \'05012015 \'AND datesUnavailable NOT LIKE \'05012015 \''; $ result = mysql_query($ sql); while($ row = mysql_fetch_array($ result)){echo'

'.$row["vendorName"]."
「。 '「;}但是現在我將它改爲雙引號,它不會返回任何結果。:( –

0

您正在使用單引號(')。變量不會被解析。要麼把你的變量,你的報價之外,或者用雙引號(「)

而且提防SQL injections

+0

這樣做:$ region ='tn_tricities'; echo $ region; require」connect.php「; echo $ region; $ sql ='SELECT vendorName,vendorBio,vendorType,regions,datesBooked,datesUnavailable FROM vendors WHERE regions LIKE \'tn_tricities \'AND datesBooked NOT LIKE \'05012015 \'and datesUnavailable NOT LIKE \'05012015 \''; $ result = mysql_query($ sql); while($ row = mysql_fetch_array($ result)){echo'

'.$row["vendorName"]."
「。'」; }但是當我將它改爲雙引號時,它不會返回任何結果。 :( –

0

單引號不允許你使用裏面的變量,而不是使用雙引號:。

$sql = "SELECT `vendorName`, `vendorBio`, `vendorType`, `regions` FROM 
`vendors` WHERE `regions` LIKE \'$region\' AND `datesBooked` NOT LIKE 
\'$date\' AND `datesUnavailable` NOT LIKE \'$date\' "; 
+0

這工作:$ region ='tn_tricities'; echo $ region; require「connect.php」; echo $ region; $ sql ='SELECT vendorName,vendorBio,vendorType,regions,datesBooked,datesUnavailable FROM vendors WHERE regions LIKE \ 'tn_tricities \'和datesBooked NOT LIKE \'05012015 \'AND datesUnavailable NOT LIKE \'05012015 \''; $ result = mysql_query($ sql); while($ row = mysql_fetch_array($ result)){echo'

'.$row["vendorName"]."
「。 '「;}但是現在我將它改爲雙引號,它不會返回任何結果。:( –

0

這是因爲單引號和雙引號之間的區別。

單引號不要「讀」它們內部變量只是打印你寫的東西。雙引號改爲讀取變量值並替換您用它們寫入的字符串。

小例子:

$var = "Hello"; 

echo "$var"; 
//prints Hello 
echo '$var'; 
// prints $var 

所以,簡單地附上您的查詢在雙引號,一切都應該很好地工作:

$sql = "SELECT `vendorName`, `vendorBio`, `vendorType`, `regions` FROM `vendors` WHERE 
`regions` LIKE \'$region\' AND `datesBooked` NOT LIKE \'$date\' AND `datesUnavailable` 
NOT LIKE \'$date\'"; 
+0

這仍然不會返回任何結果:(我直接從您的示例中複製並粘貼,並且當它tn_tricities中,但是當我將它更改爲LIKE \'$ region \'時,它不起作用:( –

+0

這工作:$ region ='tn_tricities'; echo $ region; require「connect.php」; echo $ region; $ sql ='選擇vendorName,vendorBio,vendorType,區域,datesBooked,datesUnavailable FROM ven dors WHERE地區LIKE \'tn_tricities \'AND datesBooked NOT LIKE \'05012015 \'and datesUnavailable NOT LIKE \'05012015 \''; $ result = mysql_query($ sql); while($ row = mysql_fetch_array($ result)){echo'

'.$row["vendorName"]."
「。' 「; }但是當我將它改爲雙引號時,它不會返回任何結果。 :( –

0

,請不要使用直接的變量爲MySQL查詢。有人可以提交; DELETE * FROM TABLE;或任何任意mysql代碼作爲日期或地區,並可以做非常邪惡的事情到您的服務器。請使用轉義函數,如mysqli_real_escape_string

我會建議:

$sql = 'SELECT `vendorName`, `vendorBio`, `vendorType`, `regions` FROM 
`vendors` WHERE `regions` LIKE \'' . $region . '\' AND `datesBooked` NOT LIKE 
\'' . mysqli_real_escape_string($date) . '\' AND `datesUnavailable` NOT LIKE \'' . real_escape_string($date) . '\' '; 

請讀了更多關於SQL注入 - http://en.wikipedia.org/wiki/SQL_injection

+0

這工作:$ region ='tn_tricities'; echo $ region; require「connect.php」; echo $ region; $ sql ='SELECT vendorName,vendorBio,vendorType,regions,datesBooked,datesUnavailable FROM vendors WHERE regions LIKE \ 'tn_tricities \'和datesBooked NOT LIKE \'05012015 \'AND datesUnavailable NOT LIKE \'05012015 \''; $ result = mysql_query($ sql); while($ row = mysql_fetch_array($ result)){echo'

'.$row["vendorName"]."
「。'「;}但是,當我將其更改爲雙引號時,它不返回任何結果。:( –