php mysqli 预处理语句 select
php mysqli prepared statements select
正在尝试创建一个函数来创建简单的 CRUD "Select",并为任何 table 设置多个参数。我认为我遇到了最难的部分,但现在无法获取数据。也许我做错了什么我想不通。
我的准备语句函数:
function prepared_query($mysqli, $sql, $params, $types = ""){
$types = $types ?: str_repeat("s", count($params));
if($stmt = $mysqli->prepare($sql)) {
$stmt->bind_param($types, ...$params);
$stmt->execute();
return $stmt;
} else {
$error = $mysqli->errno . ' ' . $mysqli->error;
error_log($error);
}
}
查询创建者:
function create_select_query($table, $condition = "", $sort = "", $order = " ASC ", $clause = ""){
$table = escape_mysql_identifier($table);
$query = "SELECT * FROM ".$table;
if(!empty($condition)){
$query .= create_select_query_where($condition,$clause);
}
if(!empty($sort)){
$query .= " ORDER BY ".$sort." $order";
}
return $query;
}
创建 WHERE 子句的辅助函数:
function create_select_query_where($condition,$clause){
$query = " WHERE ";
if(is_array($condition)){
$pair = array();
$size = count($condition);
$i = 0;
if($size > 1){
foreach($condition as $field => $val){
$i++;
if($size-1 == $i){
$query .= $val." = ? ".$clause. " ";
}else{
$query .= $val." = ? ";
}
}
}else{
foreach($condition as $field => $val){
$query .= $val." = ? ";
}
}
}else if(is_string($condition)){
$query .= $condition;
}else{
$query = "";
}
return $query;
}
select 函数本身:
function crud_select($conn, $table, $args, $sort, $order, $clause){
$sql = create_select_query($table, array_keys($args),$sort, $order, $clause);
print_r($sql);
if($stmt = prepared_query($conn, $sql, array_values($args))){
return $stmt;
}else{
$errors [] = "Something weird happened...";
}
}
当我创建查询时,似乎可以,但无法获取数据。如果我创建一个只有一个参数的数组,查询将转换为:
SELECT * FROM `teste_table` WHERE id = ?
如果我用多个参数创建,它会变成这样:
SELECT * FROM `teste_table` WHERE id = ? AND username = ?
那么,我怎样才能正确地从 select 中获取数据呢?这应该用于多种目的,所以我可以获得不止一个结果,所以我猜最好的方法是将数据作为数组获取。
我想我很接近,但无法弄清楚。谢谢
我 将您的 select 功能限制为 简单的主键查找 。现在你打开了一罐蠕虫。结果,您得到了纠缠不清的实现代码和不可读的应用程序代码。
$table, $args, $sort, $order, $clause
这些变量有什么用?您将如何调用此函数 - 随机排列的乱码 SQL 存根列表,而不是简单明了的 SQL 字符串?以及如何将列列表指定为select?如何使用连接? SQL 函数?别名? 为什么你不能马上写一个 SQL 语句? 你已经有一个 selects 的函数,虽然没有你添加的这个野蛮的错误报告代码对它:
function prepared_query($mysqli, $sql, $params, $types = ""){
$types = $types ?: str_repeat("s", count($params));
$stmt = $mysqli->prepare($sql)) {
$stmt->bind_param($types, ...$params);
$stmt->execute();
return $stmt;
}
只要坚持下去,它就会为您服务。
$sql = "SELECT * FROM `teste_table` WHERE id = ? AND username = ?";
$stmt = prepared_query($mysqli, $sql, [$id, $name]);
$row = $stmt->get_result()->fetch_assoc();
唯一的特定 select 功能可能再次是简单的主键查找:
function crud_find($conn, $table, $id)
{
$table = escape_mysql_identifier($table);
$sql = "SELECT * FROM $table WHERE id=?";
$stmt = prepared_query($conn, $sql, [$id], "i");
return $stmt->get_result()->fetch_assoc();
}
对于其他一切,只需使用具有原生 SQL 的通用函数。
正在尝试创建一个函数来创建简单的 CRUD "Select",并为任何 table 设置多个参数。我认为我遇到了最难的部分,但现在无法获取数据。也许我做错了什么我想不通。
我的准备语句函数:
function prepared_query($mysqli, $sql, $params, $types = ""){
$types = $types ?: str_repeat("s", count($params));
if($stmt = $mysqli->prepare($sql)) {
$stmt->bind_param($types, ...$params);
$stmt->execute();
return $stmt;
} else {
$error = $mysqli->errno . ' ' . $mysqli->error;
error_log($error);
}
}
查询创建者:
function create_select_query($table, $condition = "", $sort = "", $order = " ASC ", $clause = ""){
$table = escape_mysql_identifier($table);
$query = "SELECT * FROM ".$table;
if(!empty($condition)){
$query .= create_select_query_where($condition,$clause);
}
if(!empty($sort)){
$query .= " ORDER BY ".$sort." $order";
}
return $query;
}
创建 WHERE 子句的辅助函数:
function create_select_query_where($condition,$clause){
$query = " WHERE ";
if(is_array($condition)){
$pair = array();
$size = count($condition);
$i = 0;
if($size > 1){
foreach($condition as $field => $val){
$i++;
if($size-1 == $i){
$query .= $val." = ? ".$clause. " ";
}else{
$query .= $val." = ? ";
}
}
}else{
foreach($condition as $field => $val){
$query .= $val." = ? ";
}
}
}else if(is_string($condition)){
$query .= $condition;
}else{
$query = "";
}
return $query;
}
select 函数本身:
function crud_select($conn, $table, $args, $sort, $order, $clause){
$sql = create_select_query($table, array_keys($args),$sort, $order, $clause);
print_r($sql);
if($stmt = prepared_query($conn, $sql, array_values($args))){
return $stmt;
}else{
$errors [] = "Something weird happened...";
}
}
当我创建查询时,似乎可以,但无法获取数据。如果我创建一个只有一个参数的数组,查询将转换为:
SELECT * FROM `teste_table` WHERE id = ?
如果我用多个参数创建,它会变成这样:
SELECT * FROM `teste_table` WHERE id = ? AND username = ?
那么,我怎样才能正确地从 select 中获取数据呢?这应该用于多种目的,所以我可以获得不止一个结果,所以我猜最好的方法是将数据作为数组获取。
我想我很接近,但无法弄清楚。谢谢
我
$table, $args, $sort, $order, $clause
这些变量有什么用?您将如何调用此函数 - 随机排列的乱码 SQL 存根列表,而不是简单明了的 SQL 字符串?以及如何将列列表指定为select?如何使用连接? SQL 函数?别名? 为什么你不能马上写一个 SQL 语句? 你已经有一个 selects 的函数,虽然没有你添加的这个野蛮的错误报告代码对它:
function prepared_query($mysqli, $sql, $params, $types = ""){
$types = $types ?: str_repeat("s", count($params));
$stmt = $mysqli->prepare($sql)) {
$stmt->bind_param($types, ...$params);
$stmt->execute();
return $stmt;
}
只要坚持下去,它就会为您服务。
$sql = "SELECT * FROM `teste_table` WHERE id = ? AND username = ?";
$stmt = prepared_query($mysqli, $sql, [$id, $name]);
$row = $stmt->get_result()->fetch_assoc();
唯一的特定 select 功能可能再次是简单的主键查找:
function crud_find($conn, $table, $id)
{
$table = escape_mysql_identifier($table);
$sql = "SELECT * FROM $table WHERE id=?";
$stmt = prepared_query($conn, $sql, [$id], "i");
return $stmt->get_result()->fetch_assoc();
}
对于其他一切,只需使用具有原生 SQL 的通用函数。