PHP - SQL - intval don't work - mistake


PHP - SQL - intval don't work - mistake

所以我是新人,所以我不是很好。所以很抱歉我的英语不好,但是我帮助你可以我帮助!

这是我的代码

$sql = "INSERT INTO bestellung (userID, name, email, item, menge, total)
VALUES (" . intval($row['userID'],'".$_POST["name"]."','".$_POST["email"]."','".$_POST["item"]."','".$_POST["menge"]."','".$_POST["total"]."')";

这不是完整的代码!邀请书中有错误,但我不知道错误是什么!

所以我帮你也能帮我!谢谢。

您在评论中说您正在使用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);

看到这有多容易了吗?不需要紧张地盯着引号中的引号。无需考虑将不安全的post变量插入到SQL查询中。

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

您忘记关闭括号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"]."')";

EDIT 1:还有一件事。使用sql预处理语句。它将避免sql注入:

EDIT 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();
   }