Tu código tiene varios problemas:
- Estás usando interpolación directa de variables en una sentencia
- Estás usando un conector obsoleto
- Estás usando directamente una variable superglobal sin comprobar si existe
- Estás utilizando
die()
en vez de excepciones
Sin embargo, todo eso va por el lado de las buenas prácticas. Asumiendo que no tienes intención de cambiar tus prácticas, el error puntual se puede debuggear haciendo:
$sentencia="select * from productos where id=".$_GET['id'];
print_r($sentencia);
$re=mysql_query($sentencia) or die (mysql_error());
Eso no soluciona tu problema, pero es el camino para que tú mismo puedas diagnosticar qué le estás pasando a mysql_query
en vez de simplemente asumir que "no encuentras el error".
Recomendación
No uses el conector php_mysql. Usa PDO o MySQLi. Usa sentencias preparadas en vez de interpolación directa de variables. Comprueba la existencia de una superglobal en vez de usarla directamente. Usa excepciones en vez de die()
.
Cómo quedaría con PDO:
if(!isset($_GET['id']) ){ // <-- compruebo la existencia de la superglobal
echo 'No está fijado el parámetro "id"';
} else {
$id = $_GET['id'];
$sentencia="select * from productos where id=:id";
$stmt = $conn->prepare($sentencia); // <-- uso una sentencia preparada
try {
$stmt->execute([':id'=>$id]); // <-- PDO sanitiza el parámetro $id
} catch (\PDOException $e) {
echo 'Ocurrió un error en la consulta: '.$e->getMessage();
}
}