SQL选择不PHP工作,但确实MySQL服务器本身

问题描述:

我有这个功能SQL选择不PHP工作,但确实MySQL服务器本身

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中运行这个函数时,所有的都可以正常工作。该表具有现场生活,并确保查询应该工作。我错过了什么?

感谢

+4

“It break”。你遇到了什么错误? –

+0

很好的问题,奇怪的是,没有。它更多的是在SQL本身内解析。如果我print_r $ resp,它只是中途解析并打破脚本。 – willium

+0

我没有使用mysql_connect ... – willium

您还没有张贴在这里既不是你的PHP代码,也没有$id变量的值来产生真正的SQL查询。这让我觉得你没有真正检查过它们。所以当你说«我在终端里运行sql中的这个函数,但是所有工作都很好»你可能指的是你打算创建的SQL查询。因此,问题是您的PHP代码不会发送您认为它的查询和值。

故障排除步骤:

$q->execute(array(":id"=>$id));
  1. 权,检查的$sql$id值。您可以使用var_dump()或您选择的调试器。在第一种情况下,不要相信你的浏览器渲染视图;而是使用查看源文件菜单。

  2. 将这些值与预期结果进行比较。

  3. 确保您的PDO子类捕获错误。最简单的方法是故意制造SQL语法错误,如XSELECT * FROM