【问题标题】:PHP PDO Not Inserting to DatabasePHP PDO 未插入数据库
【发布时间】:2012-08-24 06:38:45
【问题描述】:

我正在研究 PDO,我已经尝试了很多小时,但仍然无法成功地将输入插入数据库。我没有收到任何错误,因此我收到了 $err -> succeded 消息。但是没有机会插入数据库...

如果你能提供帮助,我会很高兴。

注意:关于用户 id,我从另一个表中获取 id,列 userid,并尝试将其插入到另一个表中,“params_user_id”列。

这是我的代码:

if(isset($_POST["create"])) {
try{

$param1 = cleanInput($_POST["param1"]);
$param2 = cleanInput($_POST["param2"]);
$param3 = cleanInput($_POST["param3"]);
$param4 = cleanInput($_POST["param4"]);
$param5id = cleanInput($_POST["param5id"]);
$param6id = cleanInput($_POST["param6id"]);
$param7 = cleanInput($_POST["param7"]);
$param8id = cleanInput($_POST["param8id"]);
$param9 = cleanInput($_POST["param9"]);
$param10 = cleanInput($_POST["param10"]);
$param11 = cleanInput($_POST["param11"]);
$param12 = cleanInput($_POST["param12"]);
$param13 = cleanInput($_POST["param13"]);
$param14 = cleanInput($_POST["param14"]);
$param15 = cleanInput($_POST["param15"]);
$param16 = cleanInput($_POST["param16"]);
$param17 = cleanInput($_POST["param17"]);
$param18 = cleanInput($_POST["param18"]);
$param19 = cleanInput($_POST["param19"]);
$param20 = cleanInput($_POST["param20"]);
$param21 = cleanInput($_POST["param21"]);
$userid = $_SESSION[':userid'];
$datenow = date('Y-m-d H:i:s');


$create_params_query = "INSERT INTO `params`(`datenow`, `param1`, `param2`, `param3`, `param4`, `param5id`, `param6id`, `param7`, `param8id`, `param9`, `param10`, `param11`, `param12`, `param13`, `param14`, `param15`, `param16`, `param17`, `param18`, `param19`, `param20`, `param21`,`params_user_id`) VALUE(:datenow, :param1, :param2, :param3, :param4, :param5id, :param6id, :param7, :param8id, :param9, :param10, :param11, :param12, :param13, :param14, :param15, :param16, :param17, :param18, :param19, :param20, :param21, :userid)";

$create_params_do = $db->prepare($create_params_query);
$create_params_do -> bindParam(':datenow', $datenow, PDO::PARAM_STR);
$create_params_do -> bindParam(':param1', $param1, PDO::PARAM_STR);
$create_params_do -> bindParam(':param2', $param2, PDO::PARAM_STR);
$create_params_do -> bindParam(':param3', $param3, PDO::PARAM_STR);
$create_params_do -> bindParam(':param4', $param4, PDO::PARAM_STR);
$create_params_do -> bindParam(':param5id', $param5id, PDO::PARAM_INT);
$create_params_do -> bindParam(':param6id', $param6id, PDO::PARAM_INT);
$create_params_do -> bindParam(':param7', $param7, PDO::PARAM_STR);
$create_params_do -> bindParam(':param8id', $param8id, PDO::PARAM_INT);
$create_params_do -> bindParam(':param9', $param9, PDO::PARAM_STR);
$create_params_do -> bindParam(':param10', $param10, PDO::PARAM_STR);
$create_params_do -> bindParam(':param11', $param11, PDO::PARAM_STR);
$create_params_do -> bindParam(':param12', $param12, PDO::PARAM_STR);
$create_params_do -> bindParam(':param13', $param13, PDO::PARAM_STR);
$create_params_do -> bindParam(':param14', $param14, PDO::PARAM_STR);
$create_params_do -> bindParam(':param15', $param15, PDO::PARAM_STR);
$create_params_do -> bindParam(':param16', $param16, PDO::PARAM_STR);
$create_params_do -> bindParam(':param17', $param17, PDO::PARAM_STR);
$create_params_do -> bindParam(':param18', $param18, PDO::PARAM_STR);
$create_params_do -> bindParam(':param19', $param19, PDO::PARAM_STR);
$create_params_do -> bindParam(':param20', $param20, PDO::PARAM_STR);
$create_params_do -> bindParam(':param21', $param21, PDO::PARAM_STR);
$create_params_do->bindParam(':userid', $userid, PDO::PARAM_INT);

$create_params_do->execute() or die(print_r($create_params_do->errorInfo(), true));
//forgot to add when posting first sorry, i have that also.
}
catch(PDOException $e) {
$log->logError($e." - ".basename(__FILE__));
}


$err = "<div class=\"success\"><strong>"._("Congrats.")."</strong><br/>"._("Success.")."</div>";
}

【问题讨论】:

  • 当然我不知道cleanInput函数的意义,但一般来说你不需要在使用bindParam作为@987654324时需要清理输入@ 会为你做的。

标签: php mysql database insert pdo


【解决方案1】:

你不见了

$create_params_do->execute();

在参数的末尾

您的查询应该是:

$create_params_query = "INSERT INTO `params`(`datenow`, `param1`, `param2`, `param3`, `param4`, `param5id`, `param6id`, `param7`, `param8id`, `param9`, `param10`, `param11`, `param12`, `param13`, `param14`, `param15`, `param16`, `param17`, `param18`, `param19`, `param20`, `param21`,`params_user_id`) VALUES(:datenow, :param1, :param2, :param3, :param4, :param5id, :param6id, :param7, :param8id, :param9, :param10, :param11, :param12, :param13, :param14, :param15, :param16, :param17, :param18, :param19, :param20, :param21, :userid)";

VALUES 不是VALUE

【讨论】:

  • 我在第一次发布时忘记添加,编辑了帖子。所以仍然需要帮助,但无论如何谢谢。
  • 是的,只是不包含在帖子中,适用于我之前创建的其他页面,但这不起作用,我不明白原因。
  • $userid 真的是会话:userid 和: 吗?
  • 实际上它可能是问题仍然存在并不确定的地方,userid 是用户注册时给定的 id,params_user_id 是另一个表中我想复制用户 ID 的另一列例如,当用户发表评论时。
  • var_dump($_SESSION[':userid'])查看userid是否存在
【解决方案2】:

要添加到 Iorga 端默认情况下 PDO 对错误保持沉默,因此如果您想知道发生了什么,您需要通过设置 PDO error_mode 来告诉 PDO 是嘈杂的,如下所示。对于您的情况 VALUE 或 VALUES 有效(使用 MySQL 5.5 测试)。捕获异常错误将为您提供它未提交到数据库的真正原因。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 2015-10-24
    • 2012-11-10
    相关资源
    最近更新 更多