2011-08-26 152 views
0

我有一个查询,看起来像这样:MySQL:错误,当查询返回没有结果?

SELECT number 
      FROM table1 
      INNER JOIN table2 
      WHERE name = 'stack_overflow' AND table1.id = table2.id 
      AND user_id = 5 

这将返回一个数字。它做的是正确的事情,但是当名字内部传递一个不存在于db中的名字时,PHP给了我一个错误。这是我正在执行它:

$stmt = $this->db->prepare($sql); 
    $stmt->execute(); 

    $x = $stmt->fetchColumn(); 

我总是得到正确的$ x值当名称的表存在,但是当它不,我得到以下错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'name_that_is_not_in_table'

不知道....

+2

显示导致此错误的实际查询。 –

+0

什么是'name_that_is_not_in_table'?它是否包含任何可能破坏查询的特殊字符? –

+0

不是......这是一个普通的字符串,它不存在,我执行查询,它只是返回没有值 – luqita

回答

1

尝试用这种方式来传递名称:

SELECT number 
      FROM table1 
      INNER JOIN table2 
      WHERE name = ? AND table1.id = table2.id 
      AND user_id = 5 

$stmt = $this->db->prepare($sql); 
$stmt->execute(array($name)); 
$x = $stmt->fetchColumn(); 
+0

不完全是我所做的,但帮助我得到解决方案。绑定这个值是个诀窍。 – luqita

0

听起来像是你需要检查多少行的重新返回第一...如果没有,通知用户。如果它有一个返回的行数,则按照您的预期获取名称列。

此外,您应该澄清查询中的别名.column,因为任何人都无需猜测给定列来自哪个表......如您的user_id和名称列。 (和“名”可能是保留字,并导致呛......所以你可能想将其包装在刻度线

`name`