【发布时间】:2017-06-15 02:01:26
【问题描述】:
我正在尝试同时获得查询的结果和行数,但如果可能的话,不必两次访问数据库。我以程序方式使用准备好的语句。我的代码如下:
$dbd = mysqli_stmt_init($dbconnection);
if (mysqli_stmt_prepare($dbd, "SELECT * FROM Contacts WHERE First_Name = ?" )) {
mysqli_stmt_bind_param($dbd, "s", $val1);
if (!mysqli_stmt_execute($dbd)) {
echo "Execute Error: " . mysqli_error($dbconnection);
} else {
//do nothing
}
} else {
echo "Prep Error: " . mysqli_error($dbconnection);
}
$result = mysqli_stmt_get_result($dbd);
所以上面的代码可以正常工作并返回我的结果。我现在要做的是使用相同的语句获取行数,但我不想编写一个全新的准备好的语句。如果我编写一个单独的准备好的语句并使用 store_results 和 num_rows 我会得到行数,但这将迫使我不得不编写一个全新的代码块并访问 db。我正在尝试执行以下操作,但它会抛出错误:
$dbd = mysqli_stmt_init($dbconnection);
if (mysqli_stmt_prepare($dbd, "SELECT * FROM Contacts WHERE First_Name = ?" )) {
mysqli_stmt_bind_param($dbd, "s", $val1);
if (!mysqli_stmt_execute($dbd)) {
echo "Execute Error: " . mysqli_error($dbconnection);
} else {
//do nothing
}
} else {
echo "Prep Error: " . mysqli_error($dbconnection);
}
$result = mysqli_stmt_get_result($dbd);
mysqli_stmt_store_result($dbd);
$rows = mysqli_stmt_num_rows($dbd);
抛出和错误好像我无法使用相同的准备好的语句同时运行获取结果和存储结果。我只是试图保持我的代码紧凑并尽可能地重用。如果我将上述内容分成两个单独的准备好的语句,它工作正常,我只是想知道有一种方法可以在我现有的语句中添加一两行并获取行数。还是我必须用新的 stmt_init、stmt_prepare、bind_param、execute 等编写一个全新的代码块...
【问题讨论】:
标签: php mysql count prepared-statement