我有用户个人资料更新页面并且有一些要更新的表单,这里是
NAME
SURNAME
password
phone
我试图在没有大脚本的情况下进行此更新,我的意思是我不想定义是否存在例如NAME等等。我希望如果存在任何标记的表单值,它在mysql中更改。我怎么知道mysqli_prepare语句可以做到这一点。我写过像这样的SQL
$stmt = "UPDATE table SET NAME=?,SURNAME=?,PASSWORD=?,PHONE=? WHERE email='" . $email . "'";
但有些不对劲,任何想法怎么做?还请建议为什么使用mysqli_prepare更好的方法,为什么它也安全?
PS。我不写PHP脚本,因为我没有任何问题
更新
我已经在php中标记了sql语句和上面这个脚本我正在写这个=>
if (isset($_POST['name']){
$name = $_POST['name'];
} else {
$name = null;
}
依旧......
但它没有执行,没有出现任何错误消息,因为我觉得sql语句有问题
只是想要填充一些细节更新,如果所有字段都填写完全更新,如何用脚本编写?
我无法理解sql语句中的这个问号,这是否意味着如果例如NAME不存在则会被忽略?
答案 0 :(得分:1)
SQL字符串中的问号不是SQL语法的一部分,它们是实际参数的占位符。如果你想这样做,你应该首先创建一个SQL语句,然后设置参数。
像
这样的东西$con = new mysqli($hostname,$username,$password,$database);
$statement = $con->prepare( "UPDATE table SET NAME=?,SURNAME=?,".
"`PASSWORD`=?,PHONE=? ".
" WHERE email=?");
$statement->bind_param("sssss",$name,$surname,$pass,$phone,$email);
示例派生自http://www.xphp.info/security/getting-started-with-mysqli/
另请注意ThiefMaster的评论:password
是MySQL中的保留字,因此您需要将其放入反引号(``
)
或者,您可以直接将值插入mysql字符串,就像您最初使用电子邮件地址一样。 您需要使用mysql_real_escape_string()
请注意,您在两种情况下都将所有值替换为已设置的值,无论是NULL
还是字符串,或者其他什么。