PHP PDO表不更新数据

时间:2015-09-16 02:41:55

标签: php mysql pdo

我是使用PHP进行编码的新手,在尝试创建待办事项列表时,我创建了一个名为' add.php'应该将新数据添加到表中。主文件index.php调用表元素ok并在浏览器上显示它们,但我无法添加新项。

add.php中的代码在这里:

<?php

require_once 'app/init.php';

if(isset($_POST['name'])) {
    $name = trim($POST['name']);

    if(!empty($name)) {
        $addedQuery = $db->prepare("
            INSERT INTO items (name, user, done, created) 
            VALUES (:name, :user, 0, NOW() )
                ");

        $addedQuery->execute([
            'name' => $name,
            'user' => $_SESSION['user_id']
            ]);
    }
}

header('location: index.php');




?> 

如果有帮助,我在WampServer 2.5上使用PHP 5.5.12和MySQL 5.6.17

2 个答案:

答案 0 :(得分:5)

好的......在任何人误解有关使用冒号作为阵列占位符的错误观念之前,这是一个神话。

  • PDO中完全合法/有效的语法。 (参考脚注)。

  • 然而,冒号确实需要在VALUES()中。

此处的真实问题与此$POST有关,并且缺少$_POST的下划线。

错误报告会向您抛出未定义的变量通知。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

另外,确保会话数组已设置/不为空,并且会话已启动。您的帖子中没有显示/显示。

还要确保表单确实使用POST方法,并且输入中包含输入的name属性。

即:<input type="text" name="name">

检查PDO中的错误:

您的连接方法也不清楚,因此请确保您确实使用PDO进行连接。

  • 不同的MySQL API不会混用。

其他参考资料:

<强>脚注:

如评论中所述,并且是VolkerK的一个很好的发现:

&#34;它在内部存储了前导冒号,请参阅&#34;

答案 1 :(得分:-2)

在PDO执行方法中传递命名参数时,必须将其作为数组传递,其名称前缀为冒号(:name而不是name)。

当传递索引参数(在prepare方法中使用?)时,你根本不会在执行方法中关联一个键。

所以试试:

$addedQuery->execute([ ':name' => $name, ':user' => $_SESSION['user_id'] ]);

并确保$_SESSION['user_id']设置正确。

编辑: 你在php.ini中打开php错误了吗?