Another generic MySQL error w/ PHP PDO

Adam

I'm getting MySQL error 42000:1064 that suggests a general syntax error with the following SQL:

UPDATE `events` SET ?=?, ?=?, ?=now() WHERE `event_id`=?;

PHP code to convert to a readable statement & also execute:

<?php
$ar = array_fill(0,count($args),'/\?/');
echo preg_replace($ar,$args,$sql,1);
$this->execute($sql, $args);
?>

This evaluates to:

    UPDATE `events` SET event_name=test, form_id=webform, last_updated=now() WHERE `event_id`=124;

Which when pasted into the MySQL workbench completes successfully.

[mysqlErrorMsg] => 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 ''event_name'='test', 'form_id'='webform', 'last_updated'=now() WHERE `event_id`=' at line 1

It should be noted that my user has full access to the table in question.

juergen d

You can't use placeholders on column names. Only on values.

Your query does NOT evaluate to (as it should)

UPDATE `events` SET event_name=test, form_id=webform, last_updated=now()
WHERE `event_id`=124;

but is being evaluated as this instead:

UPDATE `events` SET 'event_name'='test', 'form_id'='webform', 'last_updated'=now() 
WHERE `event_id`=124;

See the quotes? These are strings, not column names.

So hard code the column names and only use placeholders for values

UPDATE `events` SET event_name=?, form_id=?, last_updated=now() WHERE `event_id`=?;

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related