当我在不支持get_result()的服务器上执行以下代码时,$ results返回为“1”。似乎$ stmt-> fetch()无法正常工作。有什么我做错了吗?
我正在使用GoDaddy共享主机帐户和我的本地服务器作为我的测试环境。我的本地服务器支持get_result(),以便按预期工作。
$stmt = self::$conn->prepare($sql);
$ex = $stmt->execute();
$stmt->store_result();
if (method_exists($stmt, 'get_result'))
{
$results = $stmt->get_result();
}
else
{
$results = $stmt->fetch();
}
答案 0 :(得分:0)
尽管PHP代码库确实不一致,但是使用两个不同的函数来返回相同的值仍然没什么意义。因此,我们可以得出结论,fetch()返回与get_result()不同的东西。得出结论,我们可以使用手册页验证我们的假设。并找到fetch()
的正确用法答案 1 :(得分:0)
如果这是mysqli
,则需要对fetch()使用绑定结果 /* bind result variables */
$stmt->bind_result($name, $code);
/* fetch values */
while ($stmt->fetch()) {
printf ("%s (%s)\n", $name, $code);
答案 2 :(得分:0)
mysqli_stmt::fetch
返回bool值,但不接受任何参数。您可以在文档中清楚地看到它。如果您需要传递sql语句,则mysqli_stmt_fetch
是您的函数,它接受mysqli_stmt
作为参数。
你应该使用
$stmt->bind_result($field1, $field2);
while($stmt->fetch()){
$result[] = array($field1,$field2);
}
您可以找到更多信息here
答案 3 :(得分:0)
我使用以下代码来解决我的问题:
$stmt = self::$conn->prepare($sql);
$ex = $stmt->execute();
$stmt->store_result();
$results = array();
$allResults = array();
$params = array();
$meta = $stmt->result_metadata();
if ($meta)
{
while ($field = $meta->fetch_field())
{
$allResults[$field->name] = null;
$params[] = &$allResults[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $params);
}
while ($stmt->fetch())
{
$results[] = $allResults;
}
$stmt->free_result();