PHP-SQL-intval-don';t工作-错误

PHP-SQL-intval-don';t工作-错误,php,mysql,insert,Php,Mysql,Insert,所以我是新来的,所以我不太好。 我很抱歉我的英语不好,但是我可以帮你,我可以帮你 这是我的密码 $sql = "INSERT INTO bestellung (userID, name, email, item, menge, total) VALUES (" . intval($row['userID'],'".$_POST["name"]."','".$_POST["email"]."','".$_POST["item"]."','".$_POST["menge"]."','".$_POST

所以我是新来的,所以我不太好。 我很抱歉我的英语不好,但是我可以帮你,我可以帮你

这是我的密码

$sql = "INSERT INTO bestellung (userID, name, email, item, menge, total)
VALUES (" . intval($row['userID'],'".$_POST["name"]."','".$_POST["email"]."','".$_POST["item"]."','".$_POST["menge"]."','".$_POST["total"]."')";
这不是完整的代码! invtal中有一个错误,但我不知道错误的原因是什么

所以我帮你可以帮我!
谢谢。

您忘记关闭括号
intval($row['userID']
。请参阅下面的修复程序:

$sql = "INSERT INTO bestellung (userID, name, email, item, menge, total)
VALUES (" .intval($row['userID']),'".$_POST["name"]."','".$_POST["email"]."','".$_POST["item"]."','".$_POST["menge"]."','".$_POST["total"]."')";
编辑1:还有一件事。使用sql预处理语句。这将避免sql注入:

编辑2:请参见下面的参数化sql代码:

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=****_kevin",$username,$password);

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line


$stmt = $dbh->prepare("INSERT INTO bestellung (name, email, item, menge, total)
VALUES (:name,:email,:item,:menge,:total)");

    $stmt->execute(array('name' => $_POST['name'],
                         'email' => $_POST['email'],
                         'item'=> $_POST['item'],
                         'menge'=> $_POST['menge'],
                         'total'=> $_POST['total']));

    $dbh = null;
    } catch(PDOException $e) {
    echo $e->getMessage();
   }
试试看{
$dbh=new-PDO(“mysql:host=$hostname;dbname=*****\u-kevin,$username,$password”);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//准备(“插入到bestellung(名称、电子邮件、项目、菜单、总计)
值(:name,:email,:item,:menge,:total)”;
$stmt->execute(数组('name'=>$\u POST['name']),
'email'=>$\u POST['email'],
'item'=>$\u POST['item'],
'menge'=>$\u POST['menge'],
“总计”=>$_POST[“总计]);
$dbh=null;
}捕获(PDO$e){
echo$e->getMessage();
}

您忘记关闭括号
intval($row['userID']
。请参阅下面的修复:

$sql = "INSERT INTO bestellung (userID, name, email, item, menge, total)
VALUES (" .intval($row['userID']),'".$_POST["name"]."','".$_POST["email"]."','".$_POST["item"]."','".$_POST["menge"]."','".$_POST["total"]."')";
编辑1:还有一件事。使用sql预处理语句。这将避免sql注入:

编辑2:请参见下面的参数化sql代码:

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=****_kevin",$username,$password);

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line


$stmt = $dbh->prepare("INSERT INTO bestellung (name, email, item, menge, total)
VALUES (:name,:email,:item,:menge,:total)");

    $stmt->execute(array('name' => $_POST['name'],
                         'email' => $_POST['email'],
                         'item'=> $_POST['item'],
                         'menge'=> $_POST['menge'],
                         'total'=> $_POST['total']));

    $dbh = null;
    } catch(PDOException $e) {
    echo $e->getMessage();
   }
试试看{
$dbh=new-PDO(“mysql:host=$hostname;dbname=*****\u-kevin,$username,$password”);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//准备(“插入到bestellung(名称、电子邮件、项目、菜单、总计)
值(:name,:email,:item,:menge,:total)”;
$stmt->execute(数组('name'=>$\u POST['name']),
'email'=>$\u POST['email'],
'item'=>$\u POST['item'],
'menge'=>$\u POST['menge'],
“总计”=>$_POST[“总计]);
$dbh=null;
}捕获(PDO$e){
echo$e->getMessage();
}

您在评论中说您正在使用PDO。这为您提供了一种更容易编写代码的方法,以避免使用平衡引号和括号带来令人沮丧的问题

下面是我将如何编写此代码:

$paramDefaults = array("userID"=>null, "name"=>null, "email"=>null,
    "item"=>null, "menge"=>null, "total"=>null);
$params = array_merge($paramDefaults, array_intersect_key($_POST, $paramDefaults));

$sql = "INSERT INTO bestellung SET userID = :userID, name = :name,
    email = :email, item = :item, menge = :menge, total = :total";    
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
看看这有多容易?不需要盯着引号中的引号看,也不需要考虑在SQL查询中插入不安全的post变量


您甚至可以使用非空值设置
$paramDefaults
数组,这样,如果web请求缺少其中一个参数,插入就不会中断。

您在评论中说您正在使用PDO。这为您提供了一种更容易编写代码的方法,以避免使用平衡引号和括号时出现令人沮丧的问题

下面是我将如何编写此代码:

$paramDefaults = array("userID"=>null, "name"=>null, "email"=>null,
    "item"=>null, "menge"=>null, "total"=>null);
$params = array_merge($paramDefaults, array_intersect_key($_POST, $paramDefaults));

$sql = "INSERT INTO bestellung SET userID = :userID, name = :name,
    email = :email, item = :item, menge = :menge, total = :total";    
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
看看这有多容易?不需要盯着引号中的引号看,也不需要考虑在SQL查询中插入不安全的post变量



您甚至可以使用非空值设置
$paramDefaults
数组,这样,如果web请求缺少一个参数,您的插入就不会中断。

还有很多错误。我认为您使用的是常规记事本,因此您不会看到错误:)但是看看SO's highlighter显示的内容:>是的,我使用的是Notpad,这是对我来说最好的程序!而且它是免费的:DDo你看到错误了吗?intval有什么问题吗?
intval(
intval($row['userID'])
-你没有用
关闭它)
。在这之后,您会遇到更多错误。我不会逐个字符地指导您,所以我建议您完全学习语法,或者尝试找出错误所在。另外,下载记事本++。它是免费的,它是记事本,可以突出显示PHP代码,以便您更快地发现错误。祝您好运。您可以使用此代码进行SQL注入。您可以我们应该使用参数化查询。还有很多错误。我认为您使用的是常规记事本,这样您就看不到错误:)但看看highlighter显示的内容:>是的,我使用的是Notpad,这是对我来说最好的程序!它是免费的:你看到错误了吗?intval有什么问题?
intval($row['userID']
应该是
intval($row['userID'])
-您没有用
关闭它)
。在此之后,您将获得更多错误。我不会一个字符一个字符地指导你,所以我建议你完全学习语法,或者试着找出你错在哪里。另外,下载记事本++。它是免费的,它是记事本,它可以突出显示PHP代码,所以您可以更快地发现错误。祝您好运。您可以使用此代码进行SQL注入。您应该使用参数化查询。您是否启用了ini_集(“显示错误”,1)或屏幕上出现消息错误?我有这样的信息:但没有错误。您是否使用mysqli或pdo扩展?@chris85我怀疑自动冒号追加是否会被删除。它是在PDO早期添加的,保留它是个好主意。删除它会无缘无故地破坏许多PHP代码。您是否启用了ini_集(“显示错误”,1)或屏幕上出现消息错误?我有这样一个:但没有错误。您使用的是mysqli还是pdo扩展?@chris85我怀疑自动冒号追加将被删除。它是在PDO早期添加的,保留它是个好主意。删除它会毫无理由地破坏很多PHP代码。虽然这确实是激励OP使用PDO的最佳方式,但如果您可以包含
$PDO
赋值语句,那将是非常棒的。(只是缺少定义可能会起到威慑作用,并可能导致OP倾向于第二个答案。)@adeelx,OP在评论msantos的答案时说,他们已经在使用PDO。虽然这确实是激励OP使用PDO的最佳方式,但如果你能包含
$PDO
分配语句,那就太棒了。(仅仅是没有定义就可以