【问题标题】:how to use session value in sql query in php ?如何在 php 的 sql 查询中使用会话值?
【发布时间】:2014-02-25 15:26:07
【问题描述】:

我想在我的 sql 查询中使用会话的名称。我不知道如何使用会话比较 sql 查询中的值。在 sql 查询中比较 session 的值是否安全。 我收到此错误-

( ! ) Parse error: syntax error, unexpected T_VARIABLE in ****www\1lab\my-status.php on line 53

在html页面的顶部-:

  session_start();
   if(!isset($_SESSION['check']) or ($_SESSION['check'])!=='*****' or         !isset($_SESSION['uname']) )
    {
       header('location:index.php');
    }

在html页面之间-:

   include 'config.php';
   $list="select * from books where b_issued = "$_SESSION['uname']"";
   $data=mysqli_query($con,$list); 
   while($info = mysqli_fetch_array($data))
   {
     echo $info['b_name']."<br><br>";
   }

【问题讨论】:

  • like this .. $list="select * from books where b_issued ='".$_SESSION['uname']."'";
  • 虽然ghost的评论很丑很没礼貌,但是他说的有道理。 mysql 扩展在 PHP 中已被弃用一段时间,强烈建议改用 MySQLi 或 PDO 扩展。

标签: php


【解决方案1】:

将第 53 行更改为:

$list="select * from books where b_issued = "$_SESSION['uname']"";

到:

$list="select * from books where b_issued = " . $_SESSION['uname'];

您的问题是由未连接 2 个字符串引起的。相反,您只需一个接一个地粘贴,PHP 不知道如何处理字符串后面的变量 ($_SESSION)。它应该摆脱它吗?连接它?它只是不知道,除非你告诉它(例如,通过使用点,它是连接运算符

【讨论】:

    【解决方案2】:

    更正你的这一行,有连接错误。

       $list="select * from books where b_issued = ".$_SESSION['uname'];
    

    或者您可以这样做,将您的 $_SESSION['uname'] 放入一个变量中并将其传递给查询。

       $username = $_SESSION['uname'];
       $list="select * from books where b_issued = $username";
    

    【讨论】:

    • (mysqli_fetch_array() 期望参数 1 为 mysqli_result,布尔值在 C:\wamp\www\1lab\my-status.php 第 58 行给出)
    • 请打印您的查询 $list"..." 并在此处分享输出。
    • echo $list 工作正常并获得用户名的值.. 但仍然出现错误,我在第 58 行之前向您展示过
    • 使用“or die(mysql_error())”调试代码...添加 $data=mysqli_query($con,$list) 或 die(mysql_error());
    【解决方案3】:

    尝试下面的代码。并确保您作为会话参数传递的 * 与您在任何地方设置的相同。例如,如果您设置了 5 *,则在会话参数中使用 5 *,然后尝试下面的代码。

    session_start();
    if(!isset($_SESSION['check']) or $_SESSION['check']!='*****' or !isset($_SESSION['uname']))
    {
       header('location:index.php');
    }
    
    include 'config.php';
    $list="select * from books where b_issued = '".$_SESSION['uname']."'";
    $data=mysqli_query($con,$list); 
    while($info = mysqli_fetch_array($data))
    {
      echo $info['b_name']."<br><br>";
    }
    

    【讨论】:

      【解决方案4】:

      你忘记了连接运算符

      $list="select * from `books` where `b_issued` = ".$_SESSION['uname'];
                                                    // ^------ Here
      

      【讨论】:

        【解决方案5】:

        如前所述,您需要使用连接运算符告诉 php 将此会话变量“添加”到 SQL 查询中。或者,您可以使用在安全性方面要好得多的准备好的语句。此外,您应该转义与您的数据库交互的任何内容,即使它源自数据库!

        $list="select * from books where b_issued = ?";
        $uname = htmlentities($_SESSION['uname']);
        $stmt = $con->prepare($list);
        $stmt->bind_param('s', $uname);
        $stmt->execute();
        $res = $stmt->get_result();
        while ($row = $res->fetch_array(MYSQLI_ASSOC)) 
            {
                echo $row['b_name']."<br><br>";
            };
        

        【讨论】:

          【解决方案6】:

          第 53 行的正确语法应该是:

          $list="select * from `books` where `b_issued` = '".$_SESSION['uname']."'";
          

          'uname' 的希望会话值是一个字符串。

          【讨论】:

            【解决方案7】:

            它适用于 $list="select * from books where b_issued = '{$_SESSION['uname']}'";

            【讨论】:

              猜你喜欢
              • 2021-09-28
              • 2014-03-04
              • 1970-01-01
              • 1970-01-01
              • 2017-03-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-05-25
              相关资源
              最近更新 更多