Php 将值插入mysql

Php 将值插入mysql,php,mysql,Php,Mysql,我有一个用户档案更新页面,有一些表格要更新,在这里 NAME SURNAME password phone 我尝试在没有大脚本的情况下进行更新,我的意思是我不想定义例如NAME是否存在等等。我想知道,如果存在任何标记的表单值,它将在mysql中更改。我如何知道这在mysqli_prepare语句中是可能的。我写过这样的sql $stmt = "UPDATE table SET NAME=?,SURNAME=?,PASSWORD=?,PHONE=? WHERE email='" . $email

我有一个用户档案更新页面,有一些表格要更新,在这里

NAME
SURNAME
password
phone
我尝试在没有大脚本的情况下进行更新,我的意思是我不想定义例如NAME是否存在等等。我想知道,如果存在任何标记的表单值,它将在mysql中更改。我如何知道这在mysqli_prepare语句中是可能的。我写过这样的sql

$stmt = "UPDATE table SET NAME=?,SURNAME=?,PASSWORD=?,PHONE=? WHERE email='" . $email . "'";
但是出了点问题,有什么办法吗?同时也请告知为什么使用mysqli_prepare是更好的方法,为什么它也是安全的? 我不写php脚本,因为我没有任何问题

更新

我已经标记了sql语句,在这个脚本上面我用php编写了这个=>

if (isset($_POST['name']){
    $name = $_POST['name'];
} else {
    $name = null;
}
等等

但它并没有执行,并没有显示任何错误消息,因为我认为sql语句有问题

只是想知道,如果一些细节被填充,它会被更新,如果所有字段都被填充,那么如何使用脚本编写


我无法理解sql语句中的这个问号,这是否意味着如果例如NAME不存在,它将被忽略?

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);
导出的示例

还要注意ThiefMaster的评论:
password
在MySQL中是一个保留字,因此您需要将其放在backticks(
`
)中

或者,您可以直接将这些值插入mysql字符串,就像您最初对电子邮件地址所做的那样在这种情况下,您需要使用
mysql\u real\u escape\u string()


请注意,在这两种情况下,您都在用设置的值替换所有值,可以是
NULL
或字符串,或者其他任何值

你试过什么但没有成功?您收到的错误消息是什么?请详细说明mysqli_prepare有助于防止[sql注入][1]。还有一件事,请告诉我你遇到了什么错误?[1] :我更新了问题,请查看:)我认为
密码必须包含在backticks中,这是一个保留的关键字。为什么需要backticks请解释一下?密码在MySQL中有着特殊的意义。这意味着它影响查询中发生的事情,而不仅仅是一个单词。如果你把它放在backticks中,你是在明确地告诉MySQL:这是一个命名列的单词,尽量不要给它附加任何其他特殊的含义。