如何使用bind_result与get_result的示例
2022-08-30 07:58:00
我想看看如何使用vs调用的示例。 以及使用一个而不是另一个的目的是什么。bind_result
get_result
还有使用每种方法的利弊。
使用其中任何一个的局限性是什么,是否有区别。
我想看看如何使用vs调用的示例。 以及使用一个而不是另一个的目的是什么。bind_result
get_result
还有使用每种方法的利弊。
使用其中任何一个的局限性是什么,是否有区别。
尽管这两种方法都适用于查询,但在使用时,列通常会在查询中显式列出,因此在 中分配返回值时可以查阅列表,因为变量的顺序必须与返回行的结构严格匹配。*
bind_result()
bind_result()
$query1
bind_result()
$query1 = 'SELECT id, first_name, last_name, username FROM `table` WHERE id = ?';
$id = 5;
$stmt = $mysqli->prepare($query1);
/*
Binds variables to prepared statement
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets
*/
$stmt->bind_param('i',$id);
/* execute query */
$stmt->execute();
/* Store the result (to get properties) */
$stmt->store_result();
/* Get the number of rows */
$num_of_rows = $stmt->num_rows;
/* Bind the result to variables */
$stmt->bind_result($id, $first_name, $last_name, $username);
while ($stmt->fetch()) {
echo 'ID: '.$id.'<br>';
echo 'First Name: '.$first_name.'<br>';
echo 'Last Name: '.$last_name.'<br>';
echo 'Username: '.$username.'<br><br>';
}
$query2
get_result()
$query2 = 'SELECT * FROM `table` WHERE id = ?';
$id = 5;
$stmt = $mysqli->prepare($query2);
/*
Binds variables to prepared statement
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets
*/
$stmt->bind_param('i',$id);
/* execute query */
$stmt->execute();
/* Get the result */
$result = $stmt->get_result();
/* Get the number of rows */
$num_of_rows = $result->num_rows;
while ($row = $result->fetch_assoc()) {
echo 'ID: '.$row['id'].'<br>';
echo 'First Name: '.$row['first_name'].'<br>';
echo 'Last Name: '.$row['last_name'].'<br>';
echo 'Username: '.$row['username'].'<br><br>';
}
优点:
缺点:
优点:
fetch_all()
缺点:
您可以在相应的手册页上找到示例,get_result()
和 bind_result()
)。
虽然优点和缺点很简单:
get_result()
是唯一理智的处理结果的方式在现代 Web 应用程序中,数据永远不会在查询后立即显示。必须首先收集数据,然后才能开始输出。或者,即使您不遵循最佳实践,在某些情况下,数据也必须返回,而不是立即打印。
记住这一点,让我们看看如何使用这两种方法编写一个代码,将所选数据作为关联数组的嵌套数组返回。
bind_result()
$query1 = 'SELECT id, first_name, last_name, username FROM `table` WHERE id = ?';
$stmt = $mysqli->prepare($query1);
$stmt->bind_param('s',$id);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id, $first_name, $last_name, $username);
$rows = [];
while ($stmt->fetch()) {
$rows[] = [
'id' => $id,
'first_name' => $first_name,
'last_name' => $last_name,
'username' => $username,
];
}
并记得每次在表中添加或删除列时编辑此代码。
get_result()
$query2 = 'SELECT * FROM `table` WHERE id = ?';
$stmt = $mysqli->prepare($query2);
$stmt->bind_param('s', $id);
$stmt->execute();
$rows = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
并且此代码在表结构更改时保持不变。
还有更多。
如果您决定将准备/绑定/执行的无聊例程自动化为一个整洁的函数,该函数将像这样调用
$query = 'SELECT * FROM `table` WHERE id = ?';
$rows = prepared_select($query, [$id])->fetch_all(MYSQLI_ASSOC);
这将是一项非常合理的任务,只需几行即可完成。但随之而来的将是一个繁琐的任务。get_result()
bind_param()
这就是为什么我称这个方法为“丑陋”。bind_result()