2016-07-24 126 views
1

我正在嘗試在同一個sql語句中執行UPDATE和SELECT。出於某種原因,下面的代碼失敗了。MySQL更新和選擇一條語句

$sql = "UPDATE mytable SET last_activity=CURRENT_TIMESTAMP, 
info1=:info1, info2=:info2 WHERE id = {$id};"; 

$sql .= "SELECT id, info1, info2 FROM myTable 
WHERE info1 >=:valueA AND info2>:valueB;" 

$stmt = $conn->prepare($sql); 
$stmt->bindParam(":info1", $info1); 
$stmt->bindParam(":info2", $info2); 

$stmt->bindParam(":valueA", $valueA); 
$stmt->bindParam(":valueB", $valueB); 

$stmt->execute(); 

$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

echo json_encode($result); 

問:什麼可能我是做錯了什麼?我一直在這個問題上花費數小時,因爲它可能是我鼻子下面的一個小錯誤。


被修改:

未捕獲的異常 'PDOException' 與消息「SQLSTATE [HY000]:

予加載包含PHP代碼的頁面時獲得此錯誤消息 一般錯誤'在ajaxCall.php:89堆棧跟蹤:#0 ajaxCall.php(89): PDOStatement-> fetchAll(2)#1 {main}拋出ajaxCall.php在線89

我正在使用ajax調用包含上述代碼的php頁面,並且當我從瀏覽器加載php頁面時,出現上述錯誤消息。

線89:$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

+0

您是否收到錯誤?爲什麼不綁定'$ id'? – chris85

+0

@ chris85 $ id是從$ _SESSION獲得的,從未從用戶獲得。我現在會檢查一個錯誤。 $ valueA在這裏拼寫錯了,代碼 – Webeng

+0

沒有開始會話嗎?這是根據評論中的新代碼。你也標記爲ajax,爲什麼?任何相關性? –

回答

2

由於您正在運行兩個查詢,因此您需要致電nextRowset以訪問第二個查詢的結果。

所以,像這樣做:

// code 
$stmt->execute(); 
$stmt->nextRowset(); 
// code 

當您運行兩個或多個查詢,你會得到一個多行集結果。這意味着你得到這樣的事情(僅表示,真的這樣):既然你想要的第二組產生的結果從SELECT

Array(
    [0] => rowset1, 
    [1] => rowset2, 
    ... 
) 

- ,你可以消耗第一個致電nextRowset。這樣,您就可以從「重要」集中獲取結果。
(即使'消費'可能不是正確的詞,它適合於理解的目的)

0

執行兩個查詢一個電話,當您使用mysqlnd只允許。即使那樣,當使用預準備語句時,您必須將PDO::ATTR_EMULATE_PREPARES設置爲1。您可以設置此使用:

$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); 

或者,你可以使用$conn->exec($sql),其中工程不管。但是,它不會允許您將任何數據綁定到執行的SQL。

總而言之,不要用一次調用執行多個查詢。

+0

我在setAttribute中的當前代碼是'$ conn-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);',如何在包含先前屬性的同時包含以前的信息?這會工作嗎? :'$ conn-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION,PDO :: ATTR_EMULATE_PREPARES);'?和'1'我不確定它是否必須作爲第二個參數或? – Webeng

+0

我試過以下內容:'$ conn-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION,PDO :: ATTR_EMULATE_PREPARES,1);'沒有成功 – Webeng

+0

我嘗試了'$ conn-> setAttribute(PDO :: ATTR_EMULATE_PREPARES ,1);'錯誤信息是否與這是問題一致?我更新的問題有我正在獲取的錯誤消息。 – Webeng