Cambiar la secuencia de comandos php a PDO causando error de syntax durante la consulta de actualización de MySQL

Tengo un script php para actualizar los detalles en una tabla MySQL. Todo funcionó bien, pero ahora he cambiado el método de conexión de db a PDO:

$pdo = new PDO('mysql:host=localhost;dbname=****', '****', '*****'); 

Hice varios cambios en el script para acomodar esto, así que continúa funcionando. El único lugar que falla está justo al final después de que se actualizó la tabla mysql. Me sale este error:

Error fatal: excepción no detectada ‘PDOException’ con el mensaje ‘SQLSTATE [42000]: error de syntax o violación de acceso: 1064 Tiene un error en su syntax de SQL; revise el manual que corresponde a su versión del servidor MySQL para la syntax correcta para usar cerca de ‘y park_id = 31’ en la línea 1 ‘en /home3/danville/public_html/test2/index.php:29 Stack trace: # 0 / home3 / danville / public_html / test2 / index.php (29): PDO-> query (‘update tpf_ride …’) # 1 {main} lanzado en /home3/danville/public_html/test2/index.php en la línea 29

Esta es la pieza de código que causa el error:

 $query = "update tpf_rides set name='$name',type='$type'"; if($topride!=""){$query .= ",top_ride=$topride";} if($info!=""){$query .= ",info='$info'";} if($height!=""){$query .= ",height=$height";} if($length!=""){$query .= ",length=$length";} if($speed!=""){$query .= ",speed=$speed";} if($inversions!=""){$query .= ",inversions=$inversions";} $query .= " where ride_id=".$ride_id." and park_id=".$park_id; $pdo->query($query); } 

la línea 29 es esto en Notepad ++ $pdo->query($query); aunque el mensaje de error parece hacer referencia a la línea de arriba que $query .= " where ride_id=".$ride_id." and park_id=".$park_id;

¿Alguna idea de lo que necesito cambiar para detener el error? Detalles adicionales: me conecto a la base de datos con un include_once include. Las actualizaciones surten efecto a pesar del error.

Solutions Collecting From Web of "Cambiar la secuencia de comandos php a PDO causando error de syntax durante la consulta de actualización de MySQL"

Si va a cambiar a PDO, también puede aprovechar las declaraciones preparadas y el enlace de parámetros. De hecho, hace que sus consultas sean mucho más seguras con la inyección SQL y también hace que su código sea más legible. El enfoque del generador de consultas complica las cosas un poco, pero aún es posible. También recomendaría encarecidamente habilitar informes de errores durante el desarrollo. Por ejemplo

 error_reporting(E_ALL); ini_set('display_errors', 'On'); $upd = array('name = :name', 'type = :type'); $values = array( 'name' => $name, 'type' => $type, 'ride_id' => $ride_id, 'park_id' => $park_id ); if (!empty($topride)) { $upd[] = 'top_ride = :topride'; // :topride is the named parameter placeholder $values['topride'] = $topride; // the array key matches the named placeholder above } if (!empty($info)) { $upd[] = 'info = :info'; $values['info'] = $info; } // and so on $query = sprintf('UPDATE tpf_rides SET %s WHERE ride_id = :ride_id AND park_id = :park_id', implode(', ', $upd)); $stmt = $pdo->prepare($query); $stmt->execute($values);