致命错误:在第16行的C:\xampp\htdocs\studysite\test.php中对布尔值调用成员函数fetchAll()
我试图在我的数据库中创建列,但是当我运行代码时,我得到了 致命错误:在第16行的布尔值上调用成员函数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
$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将您的错误检查添加到我的代码中,也谢谢您