将值插入mysql

时间:2012-07-21 09:23:24

标签: php mysql

我有用户个人资料更新页面并且有一些要更新的表单,这里是

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不存在则会被忽略?

1 个答案:

答案 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还是字符串,或者其他什么。