我嘗試轉換mysql_query
到pdo
相當於PHP的mysql_query中PDO
我的表結構(需要我的問題之一是other_id
去除不相關的列)不同的結果它的數據如下:
-----------------
| id | other_id |
-----------------
| 1 | 123 |
-----------------
| 2 | 0 |
-----------------
| 3 | 456 |
-----------------
| 4 | 0 |
-----------------
以前的數據庫查詢是:
$sql = "SELECT id FROM temp_table WHERE other_id = '{$other_id}'";
$result = mysql_query($sql, $db)
return mysql_fetch_assoc($result);
該查詢被稱爲$other_id
爲NULL
(「空」在PHP中,而不是字符串或任何東西)。
結果的mysql_query:這給我的價值觀2,4
PDO等效代碼:
$sql = "SELECT id FROM temp_table WHERE other_id = :other_id";
$sth = $dbConnection->prepare($sql);
$sth->bindValue(":other_id", $other_id);
$sth->execute();
return $sth->fetchAll(PDO::FETCH_COLUMN);
結果PDO:這讓沒有價值可言。
這是我以前沒有遇到過的奇怪問題(因爲我是更多的Java開發人員,並且最近在幾年後觸及了PHP)。
作爲一種解決方法,我必須將pod輸出結果返回2,4
以下行,但想更多地瞭解上述差異。
$sth->bindValue(":other_id", empty($other_id) ? 0 : $other_id);
我也試過$sth->bindValue(":other_id", $other_id, PDO::PARAM_INT);
這並沒有幫助
會有什麼不同?更新:剛剛更改爲'bindParam'仍然是相同的問題 – Abubakkar
從技術上講,數據庫中的'0'是* NOT NULL *,所以如果您爲'$ other_id'傳入'NULL',它*不應匹配... I爲什麼它使用*在'mysql_'擴展名下工作會更困惑 - 它不應該完成。 – CD001
不是真的回答你的問題,而是空($ other_id)? 0:$ other_id'你也可以做'(int)$ other_id' –