0

过去一天我一直在尝试让 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'

任何帮助将不胜感激。谢谢

4

3 回答 3

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 有这样的能力。

于 2013-05-21T22:02:47.573 回答
0

当您在字符串中使用变量时,您应该将这些字符串放在双引号内,而不是单引号内,否则变量不会被它们的值替换。

还要检查这个问题:PHP中单引号和双引号字符串有什么区别?

于 2013-05-21T22:03:21.890 回答
0

如果使用双引号,则将变量放在大括号中 - 否则使用带点的 Concatinatoin。

于 2013-05-21T22:07:40.027 回答