在我自己的機器上正常工作的東西在生產服務器上失敗。爲什麼mysqli在bind_result之後停止?
以下代碼輸出「」和「開始嘗試分支」就是這樣。之後停止。在我自己的機器,該變量的約束,我可以繼續使用$recPhotos->fetch()
等
問題發生在這裏:
$recPhotos = GetPhotos($_SESSION['album_uid'], $getVipImages, $arrPaginationParams["currentPage"], $arrPaginationParams["photosPerPage"]);
try
{
echo($recPhotos->affected_rows); // Outputs '24'
echo("Begin try branch");
$recPhotos->bind_result($file_name, $is_vip);
echo("End try branch");
}
catch (Exception $e)
{
echo 'Exception caught: ', $e->getMessage(), "\n";
}
echo("Continue");
被調用的功能如下:
// Get photos from database
function GetPhotos($album_uid, $getVipImages,$page, $rows)
{
$objMySqli = GetDbConnection();
$page = ($page - 1) * 24;
if ($objMySqliQuery = $objMySqli->prepare("SELECT file_name, is_vip from album_pic where album_uid = ? AND is_vip = ? OR is_vip = 'N' order by is_vip DESC, file_name ASC LIMIT ?,? ;"))
{
$objMySqliQuery->bind_param('ssss', $album_uid, $getVipImages, $page, $rows);
$objMySqliQuery->execute();
$objMySqliQuery->store_result();
return $objMySqliQuery;
}
else
{
// Error
printf("Prepared Statement Error: %s\n", $objMySqli->error);
return false;
}
}
奇怪的是,如果我試圖輸出一些行INSIDE的功能,它的工作原理(我得到24行,如預期)
// Get photos from database
function GetPhotos($album_uid, $getVipImages,$page, $rows)
{
$objMySqli = GetDbConnection();
$page = ($page - 1) * 24;
if ($objMySqliQuery = $objMySqli->prepare("SELECT file_name, is_vip from album_pic where album_uid = ? AND is_vip = ? OR is_vip = 'N' order by is_vip DESC, file_name ASC LIMIT ?,? ;"))
{
$objMySqliQuery->bind_param('ssss', $album_uid, $getVipImages, $page, $rows);
$objMySqliQuery->execute();
$objMySqliQuery->bind_result($col1, $col2);
while ($objMySqliQuery->fetch())
{
printf("%s %s\n", $col1, $col2); // This will be executed 24 times
}
}
else
{
// Error
printf("Prepared Statement Error: %s\n", $objMySqli->error);
return false;
}
}
任何想法將不勝感激。謝謝!
提示:echo不是函數。你不需要使用括號。例如'echo'Hi''與'echo('Hi')'相同。 –
在您的'工作'片段中,您移除了'store_result'調用,請嘗試將其移除以用於非工作片段,並查看它是否有效。即使它不,我建議不要使用它,作爲緩衝區整個結果集,如果很大,可能會影響性能。 –
感謝您的提示球員。 @MikePurcell:我試圖刪除'store_result',但沒有奏效。正如我所說,這可以在我的本地機器上順利運行......所以我推斷它必須是生產服務器設置中的某些東西。我有點失落。 – Kerans