MYSQL: 为什么这个更新查询不起作用?
MYSQL: Why this update query won't work?
我正在尝试这个 sql 查询,但它不起作用:
<form name="modificarUsuario" action="" method="POST">
<h2>Modificación de Datos Personales</h2>
Username: <input type="text" name="username" />
Nombre Completo: <input type="text" name="nombre" />
Email: <input type="text" name="email" />
Clave: <input type="text" name="pass" />
<input type="submit" class="button" name="modificarDatos" value="Modificar datos">
<br>
</form>
$usuario = $_POST['username'];
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$clave = $_POST['pass'];
$uid = 1;
$consulta = mysqli_prepare($conectar,
"UPDATE usuario
SET username = ?, pass = ?, name = ?, email = ?)
WHERE uid = '".$uid."'
");
if ($consulta) {
mysqli_stmt_bind_param( $consulta, 'ssss', $usuario, $clave, $nombre, $email);
mysqli_stmt_execute($consulta);
echo 'Se guardaron los cambios';
}
else {echo 'Hubo un error! El cambio no se guardó!';}
mysqli_stmt_close($consulta); //here's line 52
错误是:
PHP Warning: mysqli_stmt_close() expects parameter 1 to be
mysqli_stmt, boolean given in ...
数据库有一个"usuario" table,有一个"uid"字段,是一个整数。
所有字段拼写正确且顺序正确:
uid、用户名、密码、姓名、电子邮件
我读过 this post and this other post,他们都提供了关于可能出错的有趣信息。但我已经检查过,一切似乎都正常。
来自 manual:
mysqli_prepare() returns a statement object or FALSE if an error occurred.
当你的 prepare 语句失败时,它将 return 一个布尔值,这意味着 $consulta
将不是一个语句而是一个布尔值。布尔值无法关闭,mysqli_stmt_close
需要一个语句。因此,如果您将失败的准备语句传递给 mysqli_stmt_close
,则会收到您发布的错误。
所以只有在成功时才收盘
if ($consulta) {
mysqli_stmt_bind_param( $consulta, 'ssss', $usuario, $clave, $nombre, $email);
mysqli_stmt_execute($consulta);
echo 'Se guardaron los cambios';
mysqli_stmt_close($consulta);
}
else {echo 'Hubo un error! El cambio no se guardó!';}
您的 SQL 文本(包含 UPDATE 语句的字符串)中有一个虚假的闭括号字符。这是 MySQL 语法违规。
, email = ?)
^
如果 mysqli_prepare
失败(即 returns FALSE),您应该使用 mysqli_error($connectar)
检索错误消息,这会让您看到语法错误。
else {
echo 'Hubo un error! El cambio no se guardó!';
echo mysqli_error($conectar);
}
mysqli_stmt_close
仅在存在有效语句句柄时才有效,因此该调用应向上移动到 "then" 块中,因此它仅在 prepare 返回语句句柄时才执行。
我正在尝试这个 sql 查询,但它不起作用:
<form name="modificarUsuario" action="" method="POST">
<h2>Modificación de Datos Personales</h2>
Username: <input type="text" name="username" />
Nombre Completo: <input type="text" name="nombre" />
Email: <input type="text" name="email" />
Clave: <input type="text" name="pass" />
<input type="submit" class="button" name="modificarDatos" value="Modificar datos">
<br>
</form>
$usuario = $_POST['username'];
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$clave = $_POST['pass'];
$uid = 1;
$consulta = mysqli_prepare($conectar,
"UPDATE usuario
SET username = ?, pass = ?, name = ?, email = ?)
WHERE uid = '".$uid."'
");
if ($consulta) {
mysqli_stmt_bind_param( $consulta, 'ssss', $usuario, $clave, $nombre, $email);
mysqli_stmt_execute($consulta);
echo 'Se guardaron los cambios';
}
else {echo 'Hubo un error! El cambio no se guardó!';}
mysqli_stmt_close($consulta); //here's line 52
错误是:
PHP Warning: mysqli_stmt_close() expects parameter 1 to be mysqli_stmt, boolean given in ...
数据库有一个"usuario" table,有一个"uid"字段,是一个整数。 所有字段拼写正确且顺序正确: uid、用户名、密码、姓名、电子邮件
我读过 this post and this other post,他们都提供了关于可能出错的有趣信息。但我已经检查过,一切似乎都正常。
来自 manual:
mysqli_prepare() returns a statement object or FALSE if an error occurred.
当你的 prepare 语句失败时,它将 return 一个布尔值,这意味着 $consulta
将不是一个语句而是一个布尔值。布尔值无法关闭,mysqli_stmt_close
需要一个语句。因此,如果您将失败的准备语句传递给 mysqli_stmt_close
,则会收到您发布的错误。
所以只有在成功时才收盘
if ($consulta) {
mysqli_stmt_bind_param( $consulta, 'ssss', $usuario, $clave, $nombre, $email);
mysqli_stmt_execute($consulta);
echo 'Se guardaron los cambios';
mysqli_stmt_close($consulta);
}
else {echo 'Hubo un error! El cambio no se guardó!';}
您的 SQL 文本(包含 UPDATE 语句的字符串)中有一个虚假的闭括号字符。这是 MySQL 语法违规。
, email = ?)
^
如果 mysqli_prepare
失败(即 returns FALSE),您应该使用 mysqli_error($connectar)
检索错误消息,这会让您看到语法错误。
else {
echo 'Hubo un error! El cambio no se guardó!';
echo mysqli_error($conectar);
}
mysqli_stmt_close
仅在存在有效语句句柄时才有效,因此该调用应向上移动到 "then" 块中,因此它仅在 prepare 返回语句句柄时才执行。