2016-07-08 59 views
0
<?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子句無法插入WHERE語句在PHP查詢變量

+0

您是否檢查錯誤?第二個SELECT看起來像會導致一個mysql錯誤 – Terminus

+0

http://stackoverflow.com/questions/5605965/php-concatenate-or-directly-insert-variables-in-string這將是你感興趣的 – Terminus

回答

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);