我正在尝试使用此代码一次上传多个列:
function updateMultiple($idElement,$arrayFieldValues=""){
$toSave=$arrayFieldValues?$arrayFieldValues:$_POST;
foreach($toSave as $field => $value) {
if (strpos($field, 'save_') === 0) {
$field = str_replace('save_', '', $field);
$updateString .= $field."='".addslashes($value)."', ";
}
}
$updateString = substr_replace($updateString ,"",-2);
$query="UPDATE ".$this->tab."
SET ".$updateString.", lastUser='".$usrId."'
WHERE ".$colName." = '".$idElement."'";
$this->execute($query);
}
但是我收到了这个错误:
PDOStatement::execute() [pdostatement.execute]: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET Country='England', FirstName='John', LastName='Smith', lastUser='10' ' at line 2
但对我来说这一切似乎都是对的!
答案 0 :(得分:1)
根据蒂姆的回答,你应该使用Prepared Statements
。查看documentation示例和进一步的文档。总之,而不是$query="UPDATE ".$this->tab." SET ".$updateString.", lastUser='".$usrId."' WHERE ".$colName." = '".$idElement."'";
使用:
$query = 'UPDATE '.$this->tab.' SET lastUser = :user WHERE '.$colName.' = :colvalue';
$pdo->execute(array(:user => $usrId, :colvalue => $idElement));
您可能还想使用交易,但这是留给读者的练习。
答案 1 :(得分:0)
你错过了一个。在UPDATE和SET之间。
嗯,也许吧。在任何情况下,发送到PDO的SQL都是错误的。它缺少UPDATE关键字。
检查评论。
答案 2 :(得分:0)
您需要为sql语句中的每一列提供一个值。 试试这段代码:
$query="UPDATE ".$this->tab." SET ".$updateString."='yourString' , lastUser='".$usrId."'
WHERE ".$colName." = '".$idElement."'";
答案 3 :(得分:0)
试试这个
$query="UPDATE news SET title='$title', date='$date', body='$body' WHERE newsID=$ID