我一直在試圖讓過去的一天讓mysql識別我的PhP變量,但到目前爲止我還沒有運氣。如何在內部使用PHP變量加入MYSQL查詢?
代碼:
...connect to db...
session_start();
//Calls up Session stored variable
$currentUsr= $_SESSION['username'];
//SQL Query
$sql= 'SELECT Users.Username, books.* FROM Users
INNER JOIN UserLinkBooks lb
ON Users.Username = lb.Username
INNER JOIN Books
ON lb.bkTitle = books.Title
WHERE Users.Username = "$currentUsr"';
$result=mysqli_query($conn,$sql);
//Error Check
if (!$result) {
printf("Error: %s\n", mysqli_error($conn));
exit();}
//display row
while($row=mysqli_fetch_array($result)){
echo "<strong>".$row['Title']."</strong>".$row['Description']."</br>";}
我的問題是,$ currentUsr沒有正確調用已傳遞的用戶名。在對它進行錯誤檢查之後,它似乎是空的。
我不明白的是,當我使用的代碼:
$sql = "SELECT * FROM Users WHERE `Username`='$currentUsr'";
變量進行處理,並能正常工作,調出書名的和描述完美。另外,如果我手動輸入: WHERE Users.UserName =「Bill」'; 它工作正常。
一些我從各種嘗試得到其他錯誤是:
WHERE Users.UserName = '.'$currentUsr';
Error: Unknown column '$currentUsr' in 'where clause'
或
WHERE Users.UserName = '.$currentUsr;
Error: Unknown column 'Bill' in 'where clause'
任何幫助將不勝感激。謝謝
PHP字符串的行爲有所不同,具體取決於它們是雙引號還是單引號。 –
只要確定你的用戶不是Bobby Tables(http://xkcd.com/327/)。任何用戶提供的輸入都應該包含在'mysql_real_escape_string'中,或者更好:http://www.php.net/manual/en/mysqli.prepare.php – Joshmaker
一些友好的建議是使用User.id而不是User.UserName。這是被稱爲「數據規範化」的更大概念的一部分,並且學習它可以節省您的頭髮,因爲在UTF-8字符集中,'Bill'和'Bïll'和'Bîll'會意外最終成爲相同的用戶,但外鍵1001,1802和2242明顯是不同的用戶。 – Strixy