doulilou8560 2014-05-13 17:33
浏览 21
已采纳

msqli_query中的$ _SESSION变量[关闭]

I'm trying to use a session variable in a mqsli_query statment but it doesn't work

$result = mysqli_query($link, 'SELECT book_ID, Title, username as author from users,books
here users.user_ID = books.user_ID and username = "{$_SESSION['sess_username']}"' );

I tried using real values for username = "" and it works so it means that the query is fine. It doesnt work when I try to use session variable

sample code that works when username is set to real value:

$result = mysqli_query($link, 'SELECT book_ID, Title, username as author from users,books
here users.user_ID = books.user_ID and username = "kllew"' );
  • 写回答

2条回答 默认 最新

  • dongnao9525 2014-05-13 17:47
    关注

    The "correct" method here is prepared statements. Never again will you need to concat strings into an SQL query or worry about quotes.

    $query = $link->prepare('SELECT book_ID, Title, username as author from users,books
        where users.user_ID = books.user_ID and username = ?');
    $books = array();
    
    if($query){
        // Bind the value to the `?`
        $query->bind_param('s', $_SESSION['sess_username']);
        $query->execute();
        // These variables will be created and populated with your values
        $query->bind_result($book_ID, $title, $author);
        while($query->fetch()){
            // Each time `fetch()` is, called, the variables will be
            // automagically updated with the next row's value
            // This while loop will run for each row, then stop
            $books[] = array(
                'book_ID' => $book_ID,
                'title' => $title,
                'author' => $author
            );
        }
    }
    else{
        die($link->error);
    }
    
    var_dump($books);
    

    DOCS: http://www.php.net/manual/en/mysqli.prepare.php

    EDIT: If you have the mysqlnd driver installed (usually called php-mysqlnd), then you can do this:

    $query = $link->prepare('SELECT book_ID, Title, username as author from users,books
        where users.user_ID = books.user_ID and username = ?');
    $books = array();
    
    if($query){
        // Bind the value to the `?`
        $query->bind_param('s', $_SESSION['sess_username']);
        $query->execute();
    
        // This allows you to use `fetch_array` like if you had used `mysqli_query`
        $result = $query->get_result();
        $books = $result->fetch_all(MYSQLI_ASSOC);
    }
    else{
        die($link->error);
    }
    
    var_dump($books);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?