2011-04-13 132 views
0

當使用mysqli_stmt::prepare()和​​查詢時,它不會返回結果集。但是我們需要使用stmt對象上的mysqli_stmt:fetch()進行訪問。在PHP手冊中有一個名爲mysqli_stmt::get_result()的函數,它會將結果集返回到我們定義的變量中,但是當我使用它時,它會給我一個未定義的方法錯誤。手冊說它可能在SVC中,我不知道是什麼。mysqli_stmt返回結果對象

的代碼:

$conn = new mysqli(DB_HOST,DB_USERNAME,DB_PASSWORD, DB_NAME); 
$stmt = $conn->stmt_init(); 
$stmt->prepare("select * from users where u_id = ? "); 
$stmt->bind_param('s', $param); 
$stmt->execute(); 

編輯:
我知道我可以使用bind_result()並取得()函數來檢索類的記錄:

$stmt->bind_result($column1, $column2, $column3); 

while ($stmt->fetch()) { 
    echo "Column 1: $column1\n"; 
    echo "Column 2: $column2\n"; 
    echo "Column 3: $column3\n"; 
} 

但是,我的目標是執行後得到結果集(資源類型對象),如下所示:

$result = $stmt->execute(); 

,所以我可以使用結果正常mysqli::fetch_object設置

$conn->fetch_object($result); 

有什麼辦法來實現這一目標?感謝

更新:
get_result功能正是我需要的,但它不是我的PHP

+0

你能發表一段代碼摘錄,說明你如何使用上述功能嗎?它應該看起來像http://php.net/manual/en/mysqli-stmt.fetch.php提供的例子,使用'mysqli_stmt :: bind_result()'和'mysqli_stmt :: fetch()',我推測... – Archimedix 2011-04-13 10:27:52

+0

是的,就像那個例子一樣。更新了問題代碼 – Sufendy 2011-04-14 02:07:44

+0

是的,我讀了這個例子。我知道如何獲取。我沒有問題提取它。你們誤解了我的問題!我會再次更新我的問題。 – Sufendy 2011-04-14 06:12:27

回答

1

好吧,如果你不想使用mysqli_stmt::fetch()mysqli_result::fetch_*(),我想這將是一個有點麻煩。

http://www.joekolba.com/node/2

或者,使用PDO

+1

Google搜索關鍵字:mysqli_result編寫語句。 – Archimedix 2011-04-14 06:20:37

+0

好..這很麻煩。會看看PDO。謝謝 – Sufendy 2011-04-14 06:31:02

-1

工作需要調用bind_result告訴mysqli的哪些變量需要在按住列。然後每次調用fetch時,這些變量都會自動填充,並且可以像正常一樣訪問它們。看到下面的代碼(不知道它是否工作,ymmv)。

$conn = new mysqli(DB_HOST,DB_USERNAME,DB_PASSWORD, DB_NAME); 

if($stmt = $conn->prepare('select * from users where u_id = ?')) 
{ 
    $stmt->bind_param("s", $param); 
    $stmt->execute(); 
    $stmt->bind_result($column1, $column2, $column3); 

    while ($stmt->fetch()) { 
     echo "Column 1: $column1\n"; 
     echo "Column 2: $column2\n"; 
     echo "Column 3: $column3\n"; 
    } 

    $stmt->close(); 
} 
+0

另外,如果u_id是一個整數,正如我懷疑的那樣,那麼在'bind_param'上將''s「'改爲'」i「。 – 2011-04-14 05:54:22

+0

這就是我的意思:) – Archimedix 2011-04-14 05:57:53

+2

這不是回答我的問題......這是正常的方式,它工作正常,但我希望它返回資源類型對象,而不是需要通過bind_result和fetch()來訪問它。 。 – Sufendy 2011-04-14 06:06:49

0

我已經通過以下方式完成的:

$stmt->prepare("select * from users where u_id = ? "); 
$stmt->bind_param('s', $param); 
$stmt->execute(); 

$stmt->bind_result($columns['column_name1'], $columns['column_name2'], $columns['column_name3']); 

while ($stmt->fetch()) { 
    $row = (object) $columns; 
} 

自帶相當近的FETCH_OBJECT方法。您可以通過$ row-> column_name1等訪問一行的所有數據。當然,當您更改表格並更改名稱時,您必須更新關聯列數組。但它對我來說效果很好。不想切換到PDO--考慮到前幾天我切換到MYSQLi)

0

要啓用方法mysqli_stmt :: get_result(),您需要使用mysqlnd(MySQL Native Driver)擴展名: http://php.net/manual/en/book.mysqlnd.php

由於某些原因,這種具體的方法沒有用更常用的libmysqlclient實現。在我的debian服務器(也是在我的Ubuntu桌面上),這可以運行:

sudo apt-get install php5-mysqlnd