无法在php查询中插入带有变量的WHERE语句

时间:2016-07-08 02:26:52

标签: php

    <?php

    // Working SELECT query.
    $db = new SQLite3('casino.db');

    // This works great and returns only name = bergpau !!!
    $results = $db->query('SELECT * FROM employe WHERE username="bergpau"');
   while ($row = $results->fetchArray()) 
         print  $row['nom'] . "<BR>";

   // This DOES NOT WORK AT ALL, returns no values !!! HELP !!!
   $astring = "bergpau";
   $results = $db->query('SELECT * FROM employe WHERE username=$astring');
   while ($row = $results->fetchArray()) 
        print  $row['nom'] . "<BR>";

   ?>

打开数据库,好的 不返回任何值,因为它无法验证WHERE子句中的字符串

1 个答案:

答案 0 :(得分:1)

SQL(和PHP)中的字符串需要像在第一个查询(username="bergpau")中那样引用。这也可以让你打开SQL注入;你应该使用参数化查询。

$results = $db->query("SELECT * FROM employe WHERE username='{$astring}'");

单引号中的变量也不由PHP处理。

  

与双引号和heredoc语法不同,特殊字符的变量和转义序列在单引号字符串中出现时不会被扩展。

- http://php.net/manual/en/language.types.string.php

或者你可以在赋值中传递引号(注意双引号用于PHP中的封装,单引号存储在$astring的值中):

$astring = "'bergpau'";

然后你只需要连接变量。

$results = $db->query('SELECT * FROM employe WHERE username=' . $astring);