Tengo algunas consultas mysql_query en mi código que quiero convertir a PDO pero estoy luchando para ponerme a trabajar.PHP cambiando viejo mysql_query a PDO
mi código original:
mysql_query("UPDATE people SET price='$price', contact='$contact', fname='$fname', lname='$lname' WHERE id='$id' AND username='$username' ")
or die(mysql_error());
Ahora estoy tratando:
$sql = "UPDATE people SET price='$price', contact='$contact', fname='$fname', lname='$lname' WHERE id='$id' AND username='$username'";
$q = $conn->query($sql) or die("failed!");
pero parece que no puede conseguir que funcione, alguna idea?
código actualizado:
$conn = new PDO("mysql:host=$host;dbname=$db",$user,$pass);
// check if the form has been submitted. If it has, process the form and save it to the database
if (isset($_POST['submit']))
{
// confirm that the 'id' value is a valid integer before getting the form data
if (is_numeric($_POST['id']))
{
// get form data, making sure it is valid
$id = $_POST['id'];
$fname = mysql_real_escape_string(htmlspecialchars($_POST['fname']));
$lname = mysql_real_escape_string(htmlspecialchars($_POST['lname']));
$contact = mysql_real_escape_string(htmlspecialchars($_POST['contact']));
$price = mysql_real_escape_string(htmlspecialchars($_POST['price']));
// check that firstname/lastname fields are both filled in
if ($fname == '' || $lname == '' || $contact == '' || $price == '')
{
// generate error message
$error = 'ERROR: Please fill in all required fields!';
//error, display form
renderForm($id, $fname, $lname, $contact, $price, $error);
}
else
{
// save the data to the database
$username = $_SESSION['username'];
$query = "UPDATE people
SET price=?,
contact=?,
fname=?,
lname=?
WHERE id=? AND
username=?";
$stmt = $db->prepare($query);
$stmt->bindParam(1, $price);
$stmt->bindParam(2, $contact);
$stmt->bindParam(3, $fname);
$stmt->bindParam(4, $lname);
$stmt->bindParam(5, $id);
$stmt->bindParam(6, $username);
$stmt->execute();
// once saved, redirect back to the view page
header("Location: view.php");
}
Si va a cambiar a PDO, que es una gran idea, asegúrese de utilizar marcadores de posición SQL. Su ejemplo anterior es típico de 'mysql_query' donde es probable que sea vulnerable a severos problemas de inyección de SQL. Como siempre, ¿qué errores estás obteniendo? "No se puede hacer funcionar" no es un diagnóstico útil. – tadman
A pesar de las mejoras, su método debería funcionar. ¿Puedes mostrar el código completo, desde donde comienzas a iniciar '$ conn'? – Starx
lo siento, debería haber sido más específico, tengo un formulario de edición que permite a los usuarios editar anuncios que han publicado, cuando hacen clic en un anuncio para editarlo, aparece el formulario y los valores anteriores ya están incluidos en el eco del cuadros de texto de mi base de datos. Esto todavía funciona bien (utiliza otra consulta), ahora cuando intento y sumbit el formulario aparece el error "mysql_real_escape_string" que para mí sugiere que el formulario está sufriendo datos en blanco, por así decirlo? así que no estoy seguro de si mi consulta PDO tiene la culpa, ya que estaba funcionando bien con el antiguo código mysql_query, ¡gracias por su ayuda! – neeko