2013-12-14 69 views
0

當我在不支持get_result()的服務器上執行以下代碼時,$ results返回爲'1'。看來$ stmt-> fetch()不能正常工作。有什麼我做錯了嗎?PHP MySQLi準備語句fetch()返回'1'而不是查詢結果

我使用GoDaddy Shared Hosting帳戶和我的本地服務器作爲我的測試環境。我的本地服務器支持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

是它的一個int(1)還是別的嗎?如果你想要一個關聯數組,你應該像傳遞$ stmt-> fetch(PDO :: FETCH_ASSOC) – user602525

+0

一樣傳遞fetch_style。var_dump返回BOOL(true)。另外,$ stmt-> fetch()不接受參數。 –

+0

哦,我的壞,我認爲這是PDO :: fetch() – user602525

回答

0

我用下面的代碼來解決我的問題:如果你的var_dump($結果)

$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(); 
0

雖然PHP代碼庫確實是不一致的,但是有兩個不同的函數返回相同的值仍然沒有什麼意義。因此,我們可以得出結論,fetch()返回的結果與get_result()不同。得出結論,我們可以使用手冊頁來驗證我們的假設。並且在那裏的取()

0

mysqli_stmt::fetch正確使用返回一個布爾值,他們不不接受任何參數。您可以在文檔中清楚地看到它。如果您需要傳遞sql語句,則mysqli_stmt_fetch是您的函數,它接受mysqli_stmt作爲參數。

您應該使用

$stmt->bind_result($field1, $field2); 
    while($stmt->fetch()){ 
    $result[] = array($field1,$field2); 
    } 

你可以找到更多信息here