【问题标题】:PDO Insert not working (PHP/MySQL)PDO 插入不起作用(PHP/MySQL)
【发布时间】:2013-08-06 10:33:48
【问题描述】:

经过几天的反复试验,我终于用 PDO 替换了我的标准 mysql 代码。除了应用程序需要将用户(姓名、电子邮件和注册时间)插入数据库的最后一部分之外,一切似乎都运行良好。点击提交后,页面变为空白。

我看不出代码有什么问题,如果您能帮助我,我将不胜感激。

<?php

////Database connection values
$dsn = 'mysql:host=host; dbname=name; charset=utf8';
$db_user = 'username';
$db_pass = 'password';

//Database connection
$db = new PDO($dsn, $db_user, $db_pass); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Enable Exception error mode
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // Use PDO safely = Turn off prepare emulation

// Databse connection check
if($db){
 print "connected to the db " . "<br />";
 }

//Declare values
$name = "";
$email = "";
$userMsg = "";


if ($_POST['name'] != "") {


    $name = $_POST['name'];
    $email = $_POST['email'];

//MySQL SELECT Query    
    $stmt = $db -> prepare ("SELECT * FROM newsletter WHERE email=?");
    $stmt-> bindValue(1, $email);
    $stmt -> execute ();


//Error - No email  
    if (!$email) {

        $userMsg  = '<br /><br /><h4><font color="FF0000">Please type an email address ' . $name . '.</font></h4>';

        } // End email-input check

//Error - Email already in the system       
    else if ($stmt -> rowCount() > 0) {

        $userMsg  = '<br /><br /><h4><font color="FF0000">' . $email . ' is already in the system.</font></h4>';

        } // End Row check

//OK - insert user into database        
     else {

        $insert = $db -> prepare ("INSERT INTO newsletter (name, email, dateTime) VALUES(:name, :email, ,NOW())");
        $insert -> execute(array(':name' => $name, ':email' => $email));                                            

        //Success! - Notify user
        $userMsg  = '<br /><br /><h4><font color="0066FF">Thanks ' . $name . ', you have been added successfully.</font></h4>';

        $name = "";
        $email = "";

            } // End INSERT


}

?>

【问题讨论】:

  • 为什么您认为插入不起作用?
  • :name, :email, ,NOW() 删除这个 :name, :email,NOW() 的多余逗号
  • 一个建议,您可以在代码中使用 php empty(),例如 if (!empty($_POST['name'])) {
  • 谢谢@sbml 这是多余的逗号,不敢相信我没看到。并感谢您的提示!您的常识 - 应用程序应该显示一条消息,表明用户已成功添加 ($userMsg),就像现在一样。

标签: php mysql pdo newsletter


【解决方案1】:
VALUES(:name, :email, ,NOW())"                            

应该是

VALUES(:name, :email, NOW())"

【讨论】:

  • 在看到 OP 发布的另一个问题后,我碰巧落在了这个答案/问题上,这被证明是错误的。为什么有人对您的答案投了反对票,这超出了我的理解,但是我给了您+1 回复。 OP 应该已经接受了你的回答,但是看到他的记录,似乎是一项不可能完成的任务。干杯
  • @Fred-ii-原来,这个答案写的东西完全不同。其他人在 cmets 中回答了这个问题。之后,此答案已更新为 cmets 的解决方案。这就是为什么答案被否决(不是我),但这就是为什么我没有选择这个答案作为接受。另外,如果您指的是我不接受其他问题的任何答案,那是因为它们要么在 cmets 中得到回答,要么没有可行的解决方案来解决我的问题。
  • 但到目前为止,这个答案应该是公认的,因为它确实有效。这样在搜索未回答的 pdo 问题时,这个问题就不会出现。否决评论中的答案有点幼稚。这个网站的目的是回答问题,事实上,作为 cmets 发布的答案应该不被欣赏。
猜你喜欢
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多