所以今天早上我碰到了奇怪的東西時,我正在更新我的數據庫。我在我的數據庫中執行了排序規則更改,將其從latin1
更改爲uft8
。但是,我的查詢突然在我的桌子上失敗。經過一些調試,(甚至重建表的原始設置,但沒有這樣的效果),並收到500內部錯誤,我意識到它必須與prepared statement
,所以我撕掉它,並用一個常規mysqli_query
取代它,它令人驚訝地工作。所以現在我想知道,我準備好的聲明是否一直是錯誤的,或者是因爲數據庫發生了變化而失敗。
設置
這是當前表設置。我改回了拉丁(和它的InnoDB的),但它並沒有給我的結果後,我想,當我改變了一切回到原來的設置(這是它的現在)
代碼
原代碼是這樣的,它
require_once '../db/dbControl.php';
$id = mysqli_real_escape_string($con,$_GET["id"]);
$sql = "SELECT *
FROM project
WHERE project.ProjectId = ? ";
$stmt1 = mysqli_prepare($con, $sql);
mysqli_stmt_bind_param($stmt1,'i',$id);
mysqli_stmt_execute($stmt1);
mysqli_stmt_bind_result($stmt1,$ProjectId,$ProjectTitel,$ProjectOmschrijving, $ProjectOmschrijving,$ProjectDatum,$ProjectClient,$ProjectUrl);
while (mysqli_stmt_fetch($stmt1)){
the code itself of the page
}
所以現在我只是使用普通的mysqli_query
,以使其正常工作的工作,直到變化
require_once '../db/dbControl.php';
id = mysqli_real_escape_string($con,$_GET["id"]);
$sql = "SELECT *
FROM project
WHERE project.ProjectId = '". $id ."'";
$result = mysqli_query($con,$sql);
while($rows=mysqli_fetch_array($result)){
$ProjectId = $rows['ProjectId'];
$ProjectTitel = $rows['ProjectTitel'];
$ProjectExpertise = $rows['ProjectExpertise'];
$ProjectOmschrijving = $rows['ProjectOmschrijving'];
$ProjectDatum = $rows['ProjectDatum'];
$ProjectClient = $rows['ProjectClient'];
$ProjectUrl = $rows['ProjectUrl'];
the code itself of the page
}
我糊塗一點點(也許我忽略了一些東西在這裏因爲要專注於代碼一點點),但它只是發生在項目表。我對照涉及讀數的代碼對其進行了檢查,並且他們在準備好的語句中都可以正常工作。
希望有人能發現什麼,我不能
閱讀日誌,當你得到500錯誤。如果不知道錯誤,沒有人能告訴你什麼是錯的。 – 2015-02-24 14:01:03
查詢失敗後,嘗試回顯'mysqli_error()'。 – ToBe 2015-02-24 14:03:14
這是一個很長的過程,但我認爲這是原因:mysqli準備聲明並且MySQL緩存該聲明並返回句柄。接下來發生的事情是,你重新創建表和MySQL **丟失了它的句柄,這導致整個事物引用沒有表。這也是爲什麼常規查詢正在工作並且聲明不是。從技術上講,你應該重新連接你的代碼(檢查你是否使用了持久連接)並告訴MySQL刪除緩存並在表被修改後重新準備語句。 – 2015-02-24 14:04:55