Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多次使用许多Mysqli准备的语句或较少的直接查询_Php_Mysql_Mysqli - Fatal编程技术网

Php 多次使用许多Mysqli准备的语句或较少的直接查询

Php 多次使用许多Mysqli准备的语句或较少的直接查询,php,mysql,mysqli,Php,Mysql,Mysqli,我的数据库有一个用户统计表,我找不到正确的方法来选择更新后更改的字段。现在,我用一个函数在一个查询中选择未知数量的列 问题是什么更好/更快地使用: 多个准备好的语句将使用不同的字段逐个执行: $stmt=$con->prepare("SELECT amount from achievement_list where field=?"); $stmt->bind_param("s",$query_field); foreach($fields as $field){ $query

我的数据库有一个用户统计表,我找不到正确的方法来选择更新后更改的字段。现在,我用一个函数在一个查询中选择未知数量的列

问题是什么更好/更快地使用: 多个准备好的语句将使用不同的字段逐个执行:

$stmt=$con->prepare("SELECT amount from achievement_list where field=?");
$stmt->bind_param("s",$query_field);
foreach($fields as $field){
   $query_field=$field;
   $stmt->execute();
   //some actions
}
或使用一个直接查询的所有字段:

$con->query("SELECT amount from achievement_list where field in($field_list)");
//some actions
这两种方法都可以多次使用。因此,它是在许多准备好的语句和不太直接的查询之间进行选择

没有这样的问题。 准备好的查询与直接查询没有区别。两种情况下的数字完全相同。

因此,如果查询中至少使用了一个变量,那么100%的时间都在使用准备好的查询。时期这里没什么可谈的

是的,运行单个查询比运行多个查询更快

你的问题也适合这里。只需像这样运行一个准备好的查询

$in = str_repeat('?,', count($fields) - 1) . '?';
$sql = "SELECT field, amount from achievement_list where field in($in)"
$stmt = $db->prepare($sql);
$types = str_repeat('s', count($fields));
$stmt->bind_param($types, ...$fields);
$stmt->execute();
$data = $statement->get_result()->fetch_all(MYSQLI_ASSOC);
没有这样的问题。 准备好的查询与直接查询没有区别。两种情况下的数字完全相同。

因此,如果查询中至少使用了一个变量,那么100%的时间都在使用准备好的查询。时期这里没什么可谈的

是的,运行单个查询比运行多个查询更快

你的问题也适合这里。只需像这样运行一个准备好的查询

$in = str_repeat('?,', count($fields) - 1) . '?';
$sql = "SELECT field, amount from achievement_list where field in($in)"
$stmt = $db->prepare($sql);
$types = str_repeat('s', count($fields));
$stmt->bind_param($types, ...$fields);
$stmt->execute();
$data = $statement->get_result()->fetch_all(MYSQLI_ASSOC);

在看不到任何其他信息的情况下,您应该选择单查询版本,因为它避免了往返数据库的多次往返。在看不到任何其他信息的情况下,您应该选择单查询版本,因为它避免了多次往返数据库。这是一个有趣的误解,但我在我的表中调用了一个字段
field
,它保存了用户统计表中使用的字段,用于跟踪内容。在这两种情况下,这些都是值。而且我很确定mysql缓存了准备好的语句,所以最好用于多次执行。因此,查询的数量是相同的,但第一个查询将执行多次,而第二个查询只执行一次。问题是mysql的速度有多快。正如你所知,一个查询比多个查询好。然而,正如你已经被告知的,仍然没有理由使用直接查询。你也可以在IN子句中使用单个准备好的查询。我不能在那里使用准备好的语句,因为列表的数量是动态的。有没有一种方法可以在参数未知的情况下使用它?是的,您也可以动态创建占位符列表。我在更新函数之外准备语句,在一个脚本中可以多次触发,因此我认为我不能使用占位符。如果它在里面,每次函数被激发时,它都会变成一个不同的语句,导致不缓存它,不是吗?这是一个有趣的误解,但我在我的表中调用了一个字段
field
,它保存着用户统计表中使用的字段来跟踪,嗯,东西。在这两种情况下,这些都是值。而且我很确定mysql缓存了准备好的语句,所以最好用于多次执行。因此,查询的数量是相同的,但第一个查询将执行多次,而第二个查询只执行一次。问题是mysql的速度有多快。正如你所知,一个查询比多个查询好。然而,正如你已经被告知的,仍然没有理由使用直接查询。你也可以在IN子句中使用单个准备好的查询。我不能在那里使用准备好的语句,因为列表的数量是动态的。有没有一种方法可以在参数未知的情况下使用它?是的,您也可以动态创建占位符列表。我在更新函数之外准备语句,在一个脚本中可以多次触发,因此我认为我不能使用占位符。如果它在里面,每次函数被激发时,它都会变成一个不同的语句,导致不缓存它,不是吗?