如何在内部连接MYSQL查询中使用PHP变量?

如何在内部连接MYSQL查询中使用PHP变量?,php,mysql,variables,join,Php,Mysql,Variables,Join,在过去的一天里,我一直在尝试让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

在过去的一天里,我一直在尝试让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>";}   
变量经过处理,工作正常,可以完美地调用书名和描述。此外,如果我手动键入: 其中UserName=“Bill”; 它很好用

我从各种尝试中得到的其他一些错误包括:

  WHERE Users.UserName = '.'$currentUsr';
  Error: Unknown column '$currentUsr' in 'where clause'


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

您的变量位于一个带引号的字符串中,防止了插值。您可以尝试:

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

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


还请检查此问题:

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

PHP字符串的行为会根据它们是双引号还是单引号而有所不同。请确保您的用户不是Bobby Tables()。任何用户提供的输入都应该包装在
mysql\u real\u escape\u字符串中,或者更好:一些友好的建议是使用user.id而不是user.UserName来查找用户信息。这是一个被称为“数据规范化”的更大概念的一部分,学习它可以节省您的时间,因为在UTF-8字符集中,“Bill”和“Bïll”以及“Bîll”可能会意外地成为同一个用户,但外键1001、1802和2242显然是不同的用户。
  WHERE Users.UserName = '.$currentUsr;  
  Error:  Unknown column 'Bill' in 'where clause'
$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 ."'";