【问题标题】:Simple PDO write not working简单的 PDO 写入不起作用
【发布时间】:2016-02-10 16:05:13
【问题描述】:

我正在尝试让一个简单的 PDO 插入工作。我已经使用 PDO 成功创建了一个名为 mydb10 的表,接下来我要做的是将数据插入到该表中。运行脚本不会返回任何错误(启用了 PDO 错误模式异常),但表中仍然包含空值。

我正在使用本地服务器来运行 PHP 文件,并正在连接到 Amazon RDS 数据库。目前所有通过 SSH、HTTP、HTTPS 和 MYSQL 的入站流量都允许通过数据库的安全组

$link = new PDO("mysql:host=$dbhost;dbname=$dbname",$username,$password);

$statement = $link->prepare("INSERT INTO mydb10 (selectedMain, selectedSide)
    VALUES(:selectedMain, :selectedSide)");

$statement->execute(array(
    "selectedMain" => "test",
    "selectedSide" => "test2"
));

这可能很愚蠢,但我已经被困了一段时间,感谢您提供任何帮助。如果您想了解更多信息,请告诉我。我正在尝试在我的应用程序中使用 PHP,但甚至无法让这个简单的测试工作,所以这有点令人沮丧。

编辑#1

这个 sn-p 是一个较大文件的一部分。我能够成功 使用我的凭据连接到数据库并在服务器上创建新表。我确实在异常模式下启用了 PDO 错误报告,它帮助我解决了语法错误,但是当我运行代码时不再出现任何错误。 MYSQL服务器日志也没有错误。

如果需要,我可以提供任何可能对调试有用的附加信息。

【问题讨论】:

  • 启用error_reporting 和例如PDO::ERRMODE_EXCEPTION.
  • 问:你的mySQL日志有错误吗?还是PDO::errorInfo()?如果是这样,请将它们复制/粘贴到您的帖子中。另外:看看这篇文章:PHP insert statement not working
  • 投票结束,直到提供有关调试工作的更多信息。没有它,就不可能知道几个不同的问题中的哪一个 - 错误的数据库连接设置,对数据库模式对象的错误引用等 - 可能导致问题。通常,尽管您不需要假设您的代码将始终遵循一条快乐的道路。您需要围绕 PDO 对象实例化、准备好的语句启动、查询执行等的错误处理条件,并能够记录可能导致代码执行无法按预期进行的错误。
  • 出于好奇,您是否尝试过在您的execute() 中使用array(":selectedMain" => "test", ":selectedSide" => "test2") 而不是array("selectedMain" => "test", "selectedSide" => "test2")
  • 已编辑。我确实有错误启用,这就是我处于紧要关头的原因;对我来说,似乎 PHP 认为没有问题。回复:拉斯克拉特,我刚试过,没有运气

标签: php mysql pdo


【解决方案1】:

首先您需要正确设置与 MySQL 数据库的连接。你可以把这段代码写到sql.php

<?php
  $ServerName = "******";
  $Username = "******";
  $Password = "******";
  $DataBase = "******";

  try {
    $CONN = new PDO("mysql:host=$ServerName; dbname=$DataBase", $Username, $Password);
    $CONN->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $CONN->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  } catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
  }
?>

现在,当你正确设置连接后,你需要执行sql,但在此之前你需要包含sql.php

try {
    $SQL = 'INSERT INTO MyDB10 (SelectedMain, SelectedSide) VALUES(:SelectedMain, :SelectedSide)'; // Write SQL Query to variable
    $SQL = $CONN->prepare($SQL); // Prepare SQL Query
    $SQL->execute(array('SelectedMain' => 'Test', 'SelectedSide' => 'Test2')); // Execute data to Insert in MySQL Databse
  } catch(PDOException $e) {
     echo "Error: " . $e->getMessage();
  } 

当您完成所有查询后,您必须关闭连接:

$CONN = null;

【讨论】:

  • 感谢您写下这篇文章,但没有运气让它工作。我以前能够连接到服务器并创建表,这对我来说从来都不是问题,问题是我似乎无法将数据写入这些表
  • 注意DSN中的那些空格,它们会导致连接失败。另外,在异常中丢掉有价值的信息也无济于事。避免捕获异常只显示少量信息;让异常不被捕获
  • @Phil 我是 PHP 新手,我的代码的哪一部分只显示少量错误信息?如果有的话,我确实希望在那里看到更多信息。
  • 只回显异常消息的部分。异常包含更多信息。此外,捕获异常允许程序在应该停止时继续运行。
  • 如果 PDO 遇到异常,它会回显一条消息,对吗?因为目前没有错误消息返回给我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 2017-01-13
相关资源
最近更新 更多