Php MYSQL:为什么这个更新查询赢了';不行?
我正在尝试此sql查询,但它不起作用:Php MYSQL:为什么这个更新查询赢了';不行?,php,mysql,sql,Php,Mysql,Sql,我正在尝试此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" />
<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
个人数据修改
用户名:
名称:Completo:
电邮:
克莱夫:
$usuario=$_POST['username'];
$nombre=$_POST['nombre'];
$email=$_POST['email'];
$clave=$_POST['pass'];
$uid=1;
$consulta=mysqli\u prepare($conectar,
“更新usuario
设置用户名=?、密码=?、姓名=?、电子邮件=?)
其中uid=“$uid.”
");
若有($consulta){
mysqli_stmt_bind_param($consulta,$ssss',$usuario,$clave,$nombre,$email);
mysqli_stmt_execute($consulta);
echo'Se guardaron los cambios';
}
否则{echo'Hubo un error!El-cambio no se guardó!';}
mysqli_stmt_close($consulta)//这是第52行
错误是:
PHP警告:mysqli_stmt_close()希望参数1为
mysqli_stmt,布尔值在
数据库有一个“usuario”表,表中有一个“uid”字段,它是一个整数。
所有字段拼写正确,顺序正确:
uid、用户名、通行证、姓名、电子邮件
我读过和,他们都有关于可能出错的有趣信息。但我已经检查过了,一切似乎都正常。来自:
mysqli_prepare()返回语句对象,如果发生错误,则返回FALSE
当prepare语句失败时,它将返回一个布尔值,这意味着$consulta
将不是一个语句,而是一个布尔值。布尔值不能关闭,mysqli\u stmt\u close
需要一个语句。因此,如果您将失败的预处理语句传递到mysqli\u stmt\u 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ó!';}
从:
mysqli_prepare()返回语句对象,如果发生错误,则返回FALSE
当prepare语句失败时,它将返回一个布尔值,这意味着$consulta
将不是一个语句,而是一个布尔值。布尔值不能关闭,mysqli\u stmt\u close
需要一个语句。因此,如果您将失败的预处理语句传递到mysqli\u stmt\u 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语句的字符串)中有一个虚假的close paren字符。这违反了MySQL的语法
, email = ?)
^
如果mysqli\u prepare
失败(即返回FALSE),您应该使用mysqli\u error($connectar)
检索错误消息,这样您就可以看到语法错误
else {
echo 'Hubo un error! El cambio no se guardó!';
echo mysqli_error($conectar);
}
mysqli\u stmt\u close
仅在存在有效语句句柄时有效,因此该调用应上移到“then”块中,因此它仅在prepare返回语句句柄时执行 您的SQL文本(包含UPDATE语句的字符串)中有一个虚假的close paren字符。这违反了MySQL的语法
, email = ?)
^
如果mysqli\u prepare
失败(即返回FALSE),您应该使用mysqli\u error($connectar)
检索错误消息,这样您就可以看到语法错误
else {
echo 'Hubo un error! El cambio no se guardó!';
echo mysqli_error($conectar);
}
mysqli\u stmt\u close
仅在存在有效语句句柄时有效,因此该调用应上移到“then”块中,因此它仅在prepare返回语句句柄时执行 为什么对用户名
、密码
、名称
和电子邮件
使用绑定参数,而对uid
使用字符串替换?我已经对其进行了编码。数据库中只有一个用户,管理员。我认为测试代码是否按预期工作更容易。您能给我们展示一个小的、完整的示例来演示这个问题吗?从您发布的代码中,我看不出您是如何在准备语句时出错的,因为似乎正在发生,但没有将错误消息传出。(另外:如果您输出$mysqli->error
,如果准备失败,可能会有所帮助。)在代码中遗漏一些东西,比如php标记,可能无法帮助我们了解整个情况。这通常是一个暗示,其他重要的东西丢失了。@Rosamunda为了安全起见,你真的应该绑定所有参数。这就是你如何错误地创建讨厌的bug:第一步总是很无辜的。为什么你要对用户名
、密码
、名称
和电子邮件
,使用绑定参数,但是用字符串替换uid
?我已经对它进行了编码。数据库中只有一个用户,管理员。我认为测试代码是否按预期工作更容易。您能给我们展示一个小的、完整的示例来演示这个问题吗?从您发布的代码中,我看不出您是如何在准备语句时出错的,因为似乎正在发生,但没有将错误消息传出。(另外:如果您输出$mysqli->error
,如果准备失败,可能会有所帮助。)在代码中遗漏一些东西,比如php标记,可能无法帮助我们了解整个情况。这通常是一个暗示,其他重要的东西丢失了。@Rosamunda为了安全起见,你真的应该绑定所有参数。这就是你如何错误地制造讨厌的bug的:第一步永远是无辜的。是的,我知道它失败了,但为什么呢?同样的声明我在其他地方测试过,效果很好。我想这可能是因为我的代码中有一些愚蠢的语法错误…$conectar
没有在您发布的代码中设置。这可能就是问题所在。问题中的错误与mysql\u stmt\u close有关,而与prepare无关。如果准备失败,那就是另一个问题@Rosamunda$conectar包含在另一个文件中,在其他几个地方使用(这就是为什么我知道它有效)。如果我只在mysqli\u stmt\u close()成功时才将其放入,则没有错误,但也不会更新。@Rosamunda那么为什么要显示mysqli\u close
的错误,如果它是关于你想问的mysqli\u prepare
?是的,我知道它失败了