Trying to update a column in database but i keep getting this error: Fatal error: Uncaught PDOException: SQLSTATE[HY093]:
Trying to update a column in database but i keep getting this error: Fatal error: Uncaught PDOException: SQLSTATE[HY093]:
这是我不断收到的错误:
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter
number: parameter was not defined in
C:\xampp\htdocs\premiumems\classes\Admin.php:89 Stack trace: #0
C:\xampp\htdocs\premiumems\classes\Admin.php(89):
PDOStatement->execute() #1 C:\xampp\htdocs\premiumems\process.php(60):
Admin->update(Array, '1') #2 {main} thrown in
C:\xampp\htdocs\premiumems\classes\Admin.php on line 89
public function update($fields, $id)
{
//$sql= UPDATE admin SET name = :name,
$st="";
$counter=1;
$total_fields=count($fields);
foreach($fields as $key=>$value)
{
if($counter===$total_fields)
{
$set="$key=:".$key;
$st=$st.$set;
}
else
{
$set="$key=:".$key.",";
$st=$st.$set;
$counter++;
}
}
$sql="";
$sql.= "UPDATE admin SET".$st;
$sql.= "WHERE admin_id =".$id;
$stmt=$this->connection()->prepare($sql);
foreach ($fields as $key => $value)
{
// code...
$stmt->bindValue(':' .$key, $value);
}
$stmtexec=$stmt->execute();
if ($stmtexec)
{
// code...
$reply = "employee updated successfully";
$_SESSION['success']=$reply;
header('location:index.php');
}
else
{
// code...
$reply = "unable to update employee, try again later";
$_SESSION['failure']=$reply;
header('location:edit.php?staffid='.$admin_id);
}
} //function used for updating files
class处理上面的更新过程。
认为您应该尝试下面的代码。
public function update($fields, $id)
{
//$sql= UPDATE admin SET name = :name,
$fields = (array) $fields;
if ( count($fields) > 0)
{
// update
$total = count($fields);
$keys = array_keys($fields);
$values = array_values($fields);
$set = "SET ";
$dataParams = [];
// Handle keys
if ($total == 1)
{
$set .= $keys[0] .' = :'.$keys[0];
$dataParams[':'.$keys[0]] = $values[0];
}
else
{
foreach ($keys as $i => $key)
{
$set .= $key .' = :'.$key . ', ';
$dataParams[':'.$key] = $values[$i];
}
}
$set = rtrim($set, ', ');
$sql = "UPDATE admin {$set} WHERE admin_id = {$id}";
$stmt = $this->connection();
$stmt->prepare($sql);
$execute = $stmt->execute($dataParams);
// should work fine here.
var_dump($execute);
}
else
{
return false;
}
}
这是我不断收到的错误:
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\premiumems\classes\Admin.php:89 Stack trace: #0 C:\xampp\htdocs\premiumems\classes\Admin.php(89): PDOStatement->execute() #1 C:\xampp\htdocs\premiumems\process.php(60): Admin->update(Array, '1') #2 {main} thrown in C:\xampp\htdocs\premiumems\classes\Admin.php on line 89
public function update($fields, $id)
{
//$sql= UPDATE admin SET name = :name,
$st="";
$counter=1;
$total_fields=count($fields);
foreach($fields as $key=>$value)
{
if($counter===$total_fields)
{
$set="$key=:".$key;
$st=$st.$set;
}
else
{
$set="$key=:".$key.",";
$st=$st.$set;
$counter++;
}
}
$sql="";
$sql.= "UPDATE admin SET".$st;
$sql.= "WHERE admin_id =".$id;
$stmt=$this->connection()->prepare($sql);
foreach ($fields as $key => $value)
{
// code...
$stmt->bindValue(':' .$key, $value);
}
$stmtexec=$stmt->execute();
if ($stmtexec)
{
// code...
$reply = "employee updated successfully";
$_SESSION['success']=$reply;
header('location:index.php');
}
else
{
// code...
$reply = "unable to update employee, try again later";
$_SESSION['failure']=$reply;
header('location:edit.php?staffid='.$admin_id);
}
} //function used for updating files
class处理上面的更新过程。
认为您应该尝试下面的代码。
public function update($fields, $id)
{
//$sql= UPDATE admin SET name = :name,
$fields = (array) $fields;
if ( count($fields) > 0)
{
// update
$total = count($fields);
$keys = array_keys($fields);
$values = array_values($fields);
$set = "SET ";
$dataParams = [];
// Handle keys
if ($total == 1)
{
$set .= $keys[0] .' = :'.$keys[0];
$dataParams[':'.$keys[0]] = $values[0];
}
else
{
foreach ($keys as $i => $key)
{
$set .= $key .' = :'.$key . ', ';
$dataParams[':'.$key] = $values[$i];
}
}
$set = rtrim($set, ', ');
$sql = "UPDATE admin {$set} WHERE admin_id = {$id}";
$stmt = $this->connection();
$stmt->prepare($sql);
$execute = $stmt->execute($dataParams);
// should work fine here.
var_dump($execute);
}
else
{
return false;
}
}