更新查询无法在PHP和Mysql

时间:2015-08-05 08:20:03

标签: php 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服务器版本相对应的手册,以便在#"' =' = HARDWARE出口商之间使用正确的语法。 ' = 69'在第1行

我没有考虑与注射有关的安全问题。使用此代码供个人使用。

2 个答案:

答案 0 :(得分:6)

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

$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已经deprecated,您应该考虑使用mysqli prepared statement

如果您想要一个预备语句的示例,请使用您提供的代码,您可以参考下文。在将每个值用于查询之前,无需对每个值进行清理。

/* 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 */

答案 1 :(得分:0)

问题是变量$new_name包含空格。所以你应该在语句中引用变量的使用,如下所示:

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