致命错误:在第16行的C:\xampp\htdocs\studysite\test.php中对布尔值调用成员函数fetchAll()

致命错误:在第16行的C:\xampp\htdocs\studysite\test.php中对布尔值调用成员函数fetchAll(),php,Php,我试图在我的数据库中创建列,但是当我运行代码时,我得到了 致命错误:在第16行的布尔值上调用成员函数fetchAll() $con = connect(DNS,USERNAME,PASSWORD); //columns as arrays that i need to create if it doesn't exist $columnname = array("urine_re","lab_investigation","a_records&q

我试图在我的数据库中创建列,但是当我运行代码时,我得到了

致命错误:在第16行的布尔值上调用成员函数fetchAll()

$con = connect(DNS,USERNAME,PASSWORD);
//columns as arrays that i need to create if it doesn't exist
$columnname = array("urine_re","lab_investigation","a_records","crazy_gus");
$table='anc_hsd';

//function to check if column name exist if not create it
function columnExist($item,$table,$column){

  $exists = false;
  $sql = "SHOW COLUMNS FROM  $table";
  $result = $item->query($sql);
  $results=$result->fetchAll(PDO::FETCH_COLUMN);


  if(in_array($column,$results)){
    $exists=true ;
  }

  if(!$exists){
    $sql="ALTER TABLE $table ADD $column  INT(30) NULL";
    $item->exec($sql);
  }
}


//this is where I use the function

foreach($columnname as $key=>$value){
  columnExist($con, $table, $value);
}

您的查询失败,返回FALSE。然后在布尔值中应用fetchAll(),这是不可能的。在使用资源$result之前,请检查此查询的结果

如果你想成为一名优秀的程序员,不要天真。永远不要假设你的函数调用、查询和类似的事情都能工作。总是考虑他们会失败的可能性,并用某种方式检查它。

在这种情况下,您应该有如下保护:

$sql = "SHOW COLUMNS FROM  $table";
$result = $item->query($sql);
if ($result !== FALSE) {
    $results=$result->fetchAll(PDO::FETCH_COLUMN);
} else {
    // Alternative code telling what to do when the query fails
}

希望这有帮助

查询失败,返回FALSE。然后在布尔值中应用fetchAll(),这是不可能的。在使用资源$result之前,请检查此查询的结果

如果你想成为一名优秀的程序员,不要天真。永远不要假设你的函数调用、查询和类似的事情都能工作。总是考虑他们会失败的可能性,并用某种方式检查它。

在这种情况下,您应该有如下保护:

$sql = "SHOW COLUMNS FROM  $table";
$result = $item->query($sql);
if ($result !== FALSE) {
    $results=$result->fetchAll(PDO::FETCH_COLUMN);
} else {
    // Alternative code telling what to do when the query fails
}
希望这有帮助

如果查询失败,query()方法可能返回false。在处理结果之前,检查是否有任何结果是一个好习惯:

 $result = $item->query($sql);
 if ($result) {
     $results=$result->fetchAll(PDO::FETCH_COLUMN);
 }
 else {
      // Handle errors
 }
但这只是错误处理,查询仍然失败。这很可能是因为列不是数据库表中的列的名称。

如果查询失败,query()方法可能返回false。在处理结果之前,检查是否有任何结果是一个好习惯:

 $result = $item->query($sql);
 if ($result) {
     $results=$result->fetchAll(PDO::FETCH_COLUMN);
 }
 else {
      // Handle errors
 }

但这只是错误处理,查询仍然失败。这很可能是因为列不是数据库表中的列的名称。

PDO::query()返回PDOStatement对象,失败时返回FALSE您的查询返回一个与您的问题无关的布尔值,但您的代码效率不高。您正在运行一个多次从表中获取所有列的查询。但是您应该只运行一次查询,然后将结果数组与您的
$columnname
数组进行比较,如果它不存在,则添加一个列。您所说的@Andrew是,我应该在函数之外运行查询?是的,您可以这样做,然后将
$table
传递到
columnExists
,您将传入查询的结果。如下所示:
columnExist($con,$results,$value)
并在该函数中删除
if(在数组中($column,$results)){
。可能重复
PDO::query()返回PDOStatement对象,失败时返回FALSE。
您的查询返回与您的问题无关的布尔FALSE,但您的代码效率不高。您正在运行一个多次从表中获取所有列的查询。但是您应该只运行一次查询,然后将结果数组与
$columnname
数组并添加一列(如果它不存在)。您所说的@Andrew是,我应该在函数之外运行查询?是的,您可以这样做,然后不将
$table
传递到
columnExists
,而是传入查询的结果。如下所示:
columnExist($con,$results,$value)
并删除上面的所有代码
if(在_数组($column$results)中){
在该函数中。可能重复您的说法是对的,我使用了一个错误的表名,谢谢您的输入,我真的很感激。您是对的,我使用了一个错误的表名,谢谢您的输入,我真的很感激。我想成为一名优秀的程序员,所以我只是在我的代码中添加了您的错误检查,谢谢您。我想成为一名优秀的程序员,所以我ust将您的错误检查添加到我的代码中,也谢谢您