gpt4 book ai didi

php - 为什么这个 mysql 查询在 php 中不起作用

转载 作者:行者123 更新时间:2023-11-30 00:20:50 26 4
gpt4 key购买 nike

注册过程中的 PHP 代码:

    $query="INSERT INTO `users`(`email`, `password`, `role`, `time_registration`) 
VALUES ('".mysqli_real_escape_string($con, trim($_SESSION['reg']['email']))."',
'".hash('SHA512',trim($_POST['password']))."',
'".mysqli_real_escape_string($con, trim($_SESSION['rola']))."',
NOW())";

if(!mysqli_query($con, $query)){
error(".....");
}else{

这里一切都很好。执行第一个查询并将数据存储到表“users”中。但问题来了。接下来的 php 代码生成新的 mysql 查询,该查询永远不会执行。但是当我将它复制到 PHPmyAdmin 时,它就可以工作了......

        $last_id=$con->insert_id;
$query='';
foreach($_SESSION['reg'] as $key=>$value){
if($value!=''){
$query.=" INSERT INTO user_detail (id_user,id_item,value) VALUES ('".$last_id."', (SELECT id_item FROM profil_items WHERE name='".$key."'), '".mysqli_real_escape_string($con, $value)."');";
}
}

if(!mysqli_query($con, $query)){
echo $query;
}else{
header('Location: ...somewhere....');
}
}

Mysqli 错误消息:“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以获取在 'INSERT INTO user_detail (id_user,id_item,value) VALUES ('14' , (在第 1 行选择 id_po'。

我不明白。如果语法有错误,如何在 PHPmyAdmin 中执行而不出错?

最佳答案

没有任何理由使用mysqli_multi_query()。养成使用多查询的习惯可以让自己接触新的types of SQL injection vulnerabilities .

您应该单独执行每个 INSERT,并在 foreach 循环内使用 mysqli_query()

或者将多行附加到一个多行 INSERT 语句中并在循环后执行它。

<小时/>

在这种情况下,不可以(尽管您应该使用绑定(bind)参数而不是mysqli_real_escape_string()),但我认为一旦您开始使用mysqli_multi_query(),您就可以使用它以不安全的方式在其他地方。最好永远不要使用它。

您可以使用多行语法执行单个 INSERT。但我不会担心执行多个语句的开销,直到您执行的数量如此之大以至于可以测量出重大的性能问题。不用担心微观优化。

关于php - 为什么这个 mysql 查询在 php 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23255204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com