這是我一直想弄清楚的一點,它是最簡單的查詢似乎並不想爲我工作(只在php mysqli中,在控制檯sql中工作)PHP MySQLi轉義語句中的轉義參數可能存在問題?
首先我我正在使用一個準備好的語句,只是在一個專門的id(來自另一個服務)上尋找一個匹配來更新關係,以便使用我的主鍵更容易搜索我的結尾。
查詢如下:
$query = "SELECT id
FROM {$this->config->dbprefix}{$table}
WHERE sf_id = ?
LIMIT 1";
我用這個作爲一條線,我把它分解了更好的可讀性這裏
然後我檢查準備語句是有效的(我做的這在多個地方,它在其他地方工作。
if(!($ret = $this->dbo->prepare($query))){
//handle error, this part is never called
}else{
//everything is fine, code in here is below
}
到這裏一切似乎很好。檢查表和前綴manuall y顯示他們正在工作並引用適當的表格。
$ret->bind_param('s',$id);
$ret->execute();
$ret->bind_result($retId);
$ret->fetch();
$count = $ret->num_rows;
問題是在這裏,查詢總是返回0爲num_rows。手動檢查查詢並在控制檯中嘗試返回1結果。到目前爲止,它只是一個簡單的查詢,我無法將我的頭圍繞在其他地方,但不在這裏。我相信這是構建它的正確方法(我有許多其他查詢結構相似)。
有沒有我可能遇到的任何混淆?容易錯過的東西可能導致這樣的查詢不返回結果?
編輯: 我已經嘗試進一步的錯誤處理,並嘗試執行一個if測試不會觸發錯誤,但我會嘗試更多。
擴大我有一個原始輸出$query
變量和id
變量。通過組合它們並在控制檯中手動嘗試查詢,我會得到正確的結果。我的想法在某種程度上準備聲明是逃避,導致字符串變量$id
不正確匹配。儘管這只是猜測。
您應該在這裏添加一些錯誤處理,因爲它不僅僅是可以產生錯誤的'prepare'語句。 – tadman
數據庫中是'sf_id'' varchar'還是'int'?當你手動檢查查詢並且工作時,你的語法是什麼? – Phas1c
我有一些,num_rows返回0,意思是沒有結果。所以根據準備顯示,因爲表和列是有效的,並且查詢執行並返回沒有任何可能與$ id有關的錯誤,這是我能看到的唯一合乎邏輯的事情。 'sf_id'是'varchar',我有查詢輸出,取代了?與由相同函數返回的實際ID相同,並在控制檯中正確返回1個結果。 –