繁体   English   中英

更新查询不适用于PHP和Mysql

[英]Update query not working in PHP and Mysql

我做了一个更新页面,该页面从表中获取记录,在html表单上显示所有详细信息,用户可以在其中更改/编辑值并提交。 下一页使用$ _POST获取这些值并更新表。

$new_id = $_POST['c_id'];
$new_name = $_POST['c_name'];
$table_name = "tcompany";

$sqlStatement = "UPDATE $table_name SET 'name'=$new_name WHERE 'id'= $new_id";
if($result_1 = mysql_query($sqlStatement)) 
{
    header('Location: edit_company.php');
}
else {
        echo "". mysql_error();
} 

我遇到错误:您的SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册,以在第1行的“ name” = HARDWARE Exporters WHERE'id'= 69'附近使用正确的语法

我没有考虑与注入相关的安全性问题。 将此代码用于个人用途。

列名不要使用撇号( ' ),而是将其用于变量。

$sqlStatement = "UPDATE ".$table_name." SET name='$new_name' WHERE id='$new_id'";

您还应该清除要绑定到查询的值。 使用*_real_escape_string

$new_id = mysql_real_escape_string($_POST["c_id"]);

并且mysql_* API已被弃用 ,您应该考虑改用mysqli mysql_* 语句

如果要使用已给定代码的示例准备语句,可以参考以下内容。 在将它们用于查询之前,无需清理每个值。

/* ESTABLISH FIRST YOUR CONNECTION */
$con = new mysqli("YourHost","Username","Password","Database"); /* REPLACE NECESSARY DATA */

if($stmt = $con->prepare("UPDATE ? SET name = ? WHERE id = ?")){ /* CHECK IF STATEMENT IS TRUE */
  $stmt->bind_param("ssi",$table_name,$_POST["c_name"],$_POST["c_id"]); /* BIND VALUES TO YOUR QUERY */
  $stmt->execute(); /* EXECUTE THE QUERY */
  $stmt->close();
} /* END OF PREPARED STATEMENT */

问题是变量$new_name包含空格 因此,您应该在语句中引用变量的用法,如下所示:

$sqlStatement = "UPDATE $table_name SET 'name'='$new_name' WHERE 'id'= '$new_id'";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM