过去一天我一直试图让mysql识别我的PhP变量,但到目前为止我没有运气。
代码:
...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'
非常感谢任何帮助。感谢
答案 0 :(得分:1)
您的变量位于单引号字符串中,可防止插值。你可以尝试:
$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 ."'";
在我看来,使用串联使代码更具可读性。话虽如此,您应该考虑使用参数化查询,因为它们可以减少注入问题。 Mysqli有这样的能力。
答案 1 :(得分:0)
当你在字符串中使用变量时,你应该把这些字符串放在double,而不是单引号,否则变量不会被它们的值替换。
另请查看此问题:What is the difference between single-quoted and double-quoted strings in PHP?
答案 2 :(得分:0)
如果使用双引号,则将变量放在大括号中 - 否则使用带有点的Concatinatoin。