我创建了一个更新页面,从表中获取记录,显示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行
我没有考虑与注射有关的安全问题。使用此代码供个人使用。
答案 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'";