PHP中的PDO不起作用 - 没有错误

时间:2014-07-28 12:09:13

标签: php mysql pdo

这是我的代码:

$query = $dbh->prepare("INSERT INTO veranstaltung_anfrage (id, name, bild, ort, datum, info, info_lang, beginn, eintritt, veranstalter, aname, atel, aemail, avorname, a plz, astrasse, url) VALUES (:a, :name, :bild, :ort, :datum, :info, :infolang, :beginn, :eintritt, :veranstalter, :a, :a, :a, :a, :a, :a, :a)");

$query->bindParam(':name', $name);
$query->bindParam(':bild', $bild);
$query->bindParam(':ort', $ort);
$query->bindParam(':datum', $datum);
$query->bindParam(':info', $info);
$query->bindParam(':infolang', $infolang);
$query->bindParam(':beginn', $beginn);
$query->bindParam(':eintritt', $eintritt);
$query->bindParam(':vertanstalter', $veranstalter);
$query->bindParam(':a', $a);

$a = "";
$name = $_POST['name']; 
$bild = 'bild.jpg';
$ort = $_POST['ort'];
$datum = $_POST['date1'];
$info = $_POST['info'];
$infolang = $_POST['infolang'];
$beginn = $_POST['time'];
$eintritt = $_POST['eintritt'];
$veranstalter = $_POST['veranstalter'];

$query->execute();

没有错误但也没有数据库条目。我的代码出了什么问题?

2 个答案:

答案 0 :(得分:1)

看着它,我的三条评论结合在一起。

  • 您可能应该在绑定它们之前定义参数。这不是绝对必要的(因为你使用bindParam而不是bindValue),但这是一个好主意,因为......好吧,试图在它存在之前使用它是荒谬的。

  • a plz不是有效的列名。要么它是一种类型,要么需要它周围的反引号,例如`a plz`

  • 默认情况下,PDO无提示失败。我觉得这很愚蠢,但这就是它的运作方式。 Check the docs并启用此类异常模式:

    $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    

    突然,错误!

答案 1 :(得分:0)

除了@Niet建议你必须知道你不能像你一样重复占位符的相同名称:

INSERT INTO veranstaltung_anfrage (....) VALUES (..:a, :a, :a, :a, :a, :a, :a)

你需要给他们一个独特的名字:

INSERT INTO veranstaltung_anfrage (....) VALUES (..:a1, :a2, :a3, :a4, :a5....)

然后逐个绑定它们