簡體   English   中英

SQL Select在PHP中不起作用,但在mysql服務器本身上起作用

[英]SQL Select doesn't work in PHP, but does on the mysql server itself

我有這個功能

public function populate($id) {
    $pdo = new PDOConfig();

    $sql = "SELECT * FROM ".$this->table." WHERE `id` = :id";

    $q = $pdo->prepare($sql);
    $q->execute(array(":id"=>$id));
    $resp = $q->fetchAll();
    foreach ($resp as $row) {
        foreach ($row as $key=>$value) {
            if(!is_int($key))
                $this->$key = html_entity_decode($value, ENT_QUOTES);
            if($value == null) {
                $this->$key = null;
            }
        }
    }

    $pdo = null;
    unset($pdo);
}

哪個有效。 當我嘗試做

$sql = "SELECT * FROM ".$this->table." WHERE `id` = :id";

進入

$sql = "SELECT * FROM ".$this->table." WHERE `id` = :id AND `life` > 0";

壞了 當我在終端中的sql中運行此函數時,一切正常。 該表具有字段壽命,並且可以肯定查詢可以正常工作。 我想念什么?

謝謝

您既沒有在此處發布PHP代碼生成的實際SQL查詢,也沒有發布$id變量的值。 這使我認為您尚未真正檢查過它們。 因此,當您說“我在終端中的sql中運行此函數,但一切正常”時,您可能是指要創建的SQL查詢。 因此,問題在於您的PHP代碼沒有發送您認為確實發送的查詢和值。

故障排除步驟:

  1. 就在$q->execute(array(":id"=>$id)); ,檢查$sql$id的值。 您可以使用var_dump()或選擇的調試器。 在第一種情況下,請不要信任您的瀏覽器渲染視圖。 而是使用“ 查看源代碼”菜單。

  2. 將這些值與預期結果進行比較。

  3. 確保您的PDO子類捕獲錯誤。 最簡單的方法是故意使SQL語法錯誤,例如XSELECT * FROM

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM