使用变量而不是术语MYSQLI_ASSOC

时间:2018-09-17 21:47:03

标签: php mysqli

要在mysqli_fetch_array查询中使Array类型保持动态,我想使用变量而不是术语MYSQLI_ASSOC。当我尝试以下代码时:

$array_type = "MYSQLI_ASSOC";
while($row = mysqli_fetch_array($query,$array_type)){
echo $row["name"];
}

我收到以下错误:

  

警告:mysqli_fetch_array()期望参数2为整数,在第28行的/var/www/dca/query_results.php中给出的字符串

如果可能的话,我想避免使用ifelse语句。

3 个答案:

答案 0 :(得分:3)

MYSQLI_ASSOC是数字,而不是字符串。尝试

$array_type = MYSQLI_ASSOC;

答案 1 :(得分:3)

实际上,MYSQLI_ASSOC是预定义的PHP constant(其中包含一个integer,可以帮助mysqli_result类了解获取该内容的类型应该使用)。因此,您需要将其值分配给$array_type变量,而不是将其名称命名为string

$array_type = MYSQLI_ASSOC; // no quotes nor apostrophes.
while($row = mysqli_fetch_array($query, $array_type)) {
  echo $row["name"];
}

要使事情变得更加动态,您可以创建一个包含不同提取样式的数组,然后调用该数组,并使用适当的索引指示所需的提取样式:

$array_type = [MYSQLI_ASSOC, MYSQLI_NUM, MYSQLI_BOTH]; // array containing the fetching styles.
/**
* $array_type[0] => associative array.
* $array_type[1] => default array(the indexes are numbers).
* $array_type[2] => the both styles are used.
**/
while($row = mysqli_fetch_array($query, $array_type[0])) {
  echo $row["name"];
}

希望我进一步推动了你。

答案 2 :(得分:-1)

第二个参数是可选的整数常量,它需要一个整数值而不是字符串see details here

所以您必须使用以下任何一个

$array_type = MYSQLI_ASSOC; // 1
$array_type = MYSQLI_NUM; // 2
$array_type = MYSQLI_BOTH; // 3

$array_type = 1; //MYSQLI_ASSOC;
$array_type = 2; //MYSQLI_NUM;
$array_type = 3; //MYSQLI_BOTH;

以上3个常量在MySQLi中定义如下

define ('MYSQLI_ASSOC', 1);
define ('MYSQLI_NUM', 2);
define ('MYSQLI_BOTH', 3);