-1

このコードで一度に複数の列をアップロードしようとしています:

    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

しかし、私にはすべてが正しいように思えます!

4

4 に答える 4

1

ティムの答えに続いて、を使用する必要がありますPrepared Statements。例と詳細なドキュメントについては、ドキュメントを参照してください。要約すると、$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));

さらにトランザクションを使用したい場合もありますが、それは読者に委ねられた演習です。

于 2013-01-16T23:28:39.527 に答える
0

これを試して

$query="UPDATE news SET title='$title', date='$date', body='$body' WHERE newsID=$ID 
于 2013-12-10T13:36:41.053 に答える
0

がありません。UPDATE と SET の間。うーん、多分。いずれにせよ、PDO に送信される SQL は正しくありません。UPDATE キーワードがありません。 コメントを確認してください。

于 2013-01-16T23:21:06.690 に答える
0

SQL ステートメントの各列に値を指定する必要があります。このコードを試してください:

$query="UPDATE ".$this->tab." SET ".$updateString."='yourString' , lastUser='".$usrId."'
        WHERE ".$colName." = '".$idElement."'";
于 2013-01-16T23:28:15.893 に答える