0

有人可以挽救我读了几个小时的生命吗,我完全按照这个:http: //docs.php.net/manual/en/pdo.prepared-statements.php

我得到了这个与sqli一起工作但小组告诉我这是sql注入的prome所以我正在尝试改进我的代码

这里的很多主题都在 SELECT 当我尝试这个时,我得到一个空白页,我仍然没有让 apache 呈现错误,这是一个单独的问题......

这是php:

$dbh = new PDO('mysql:host=localhost;dbname=table', $DBuser, $DBpswd );

$stmt = $dbh->prepare("INSERT INTO `sonyCES2013`.`registration`  (`id`, `firstName`, `lastName`, `eMail`, `telephone`, `outlet`, `comfirm`, `boothTour`)  VALUES (
    :id,
    :firstName, 
    :lastName,
    :eMail,
    :telephone,
    :outlet,
    :comfirm,
    :boothTour
    )");


    $stmt->bindParam(':id', NULL);
    $stmt->bindParam(':firstName', $fName);
    $stmt->bindParam(':lastName',$lName);
    $stmt->bindParam(':eMail', $eMail);
    $stmt->bindParam(':telephone', $telephone);
    $stmt->bindParam(':outlet', $outlet);   
    $stmt->bindParam(':comfirm',$comfirmation);
    $stmt->bindParam(':boothTour', $dateFormatted);

    $stmt->execute();
4

2 回答 2

0

问题是我将一些属性设置为 NULL。确认是表单上的一个可选值,如果没有人选择它,我将变量设为 NULL。我改为将它们设置为空字符串''。解决了这个问题。

于 2013-10-22T20:43:00.633 回答
0

空字符串与 NULL 不同。此外,您必须通过bindParam()引用传递变量。

如果要将 NULL 作为查询参数传递,请使用

$stmt->bindValue(':id', NULL);

或者你可以创建一个虚拟变量并传递它,然后给 PDO 一个提示它是 NULL:

$null = null;
$stmt->bindParam(':id', $null, PDO::PARAM_NULL);

或者只是id从您的 INSERT 列中省略:

$stmt = $dbh->prepare("INSERT INTO `sonyCES2013`.`registration`  
    (`firstName`, `lastName`, `eMail`, `telephone`, `outlet`, `comfirm`,
     `boothTour`) VALUES  ...
于 2013-10-22T20:51:21.673 回答