0

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

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

4

1 回答 1

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

于 2012-07-21T10:27:54.000 回答