当我在返回语句之前转储数组时,一切似乎都很好。 但是,当我转储结果时,它似乎是空的。
包含的代码应该更清楚。我从DatabaseHandler调用GetRow,当我在返回之前进行转储时,我可以看到有一个数组。 (见var_dump)
public static function GetRow($sqlQuery, $params = null,
$fetchStyle = PDO::FETCH_ASSOC)
{
// Initialize the return value to null
$result = null;
// Try to execute an SQL query or a stored procedure
try
{
// Get the database handler
$database_handler = self::GetHandler();
// Prepare the query for execution
$statement_handler = $database_handler->prepare($sqlQuery);
// Execute the query
$statement_handler->execute($params);
// Fetch result
$result = $statement_handler->fetch($fetchStyle);
}
// Trigger an error if an exception was thrown when executing the SQL query
catch(PDOException $e)
{
// Close the database handler and trigger an error
self::Close();
trigger_error($e->getMessage(), E_USER_ERROR);
}
// Return the query results
exit(var_dump($result)); // SHOWS A PROPER ARRAY
return $result;
}
在另一个调用它的函数中,没有什么可看的(假):
// Gets the details of a specific order
public static function GetOrderInfo($orderId)
{
// Build the SQL query
$sql = 'CALL orders_get_order_info(:order_id)';
// Build the parameters array
$params = array (':order_id' => $orderId);
// Execute the query and return the results
$result = DatabaseHandler::GetRow($sql, $params);
exit(var_dump($result)); // SHOWS FALSE
return $result
}
答案 0 :(得分:0)
来自文档http://php.net/manual/en/function.exit.php:
终止脚本的执行
换句话说,return
语句是不可缓存的。所以你的代码永远不会返回,因为进程在它之前退出。
答案 1 :(得分:0)
不要打电话退出。在参数/返回值方面,PHP中的数组没有什么特别之处 - 问题是你终止了exit()调用。
答案 2 :(得分:-1)
当PDO返回一个数组时,它对于foreach,while或json_encode(无效参数)等函数无法使用。
解决方案是使用MySQLi,它返回完全相同的数组,只是这次它可用于foreach,while或json_encode等函数。