2011-08-26 97 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`