无法使用 php 的 PDO 将数据插入数据库

Posted

技术标签:

【中文标题】无法使用 php 的 PDO 将数据插入数据库【英文标题】:Can not insert data into a database using php's PDO 【发布时间】:2012-11-11 22:58:11 【问题描述】:

我制作了一个表单,一旦提交就应该将数据插入数据库。如果我在查询字符串中使用变量名称,例如 INSERT INTO 表(名称,注释)VALUES($name,$comment),它可以工作,但如果我使用 pdo 准备好的语句,它就不起作用,这是我目前拥有的代码:

move_uploaded_file($_FILES["file"]["tmp_name"], "../img/" . $_FILES["file"]["name"]);
$stmt = $conn->prepare('INSERT INTO instructors (name, bio, picture) VALUES (:name, :bio, :picture)');
$stmt->bindParam(':name', $_POST['name']);
$stmt->bindParam(':bio', $_POST['bio']);
$stmt->bindParam(':picture', $_POST['file']['name']);
$stmt->execute();

文件上传并移动到我说的目录,但没有数据插入数据库。任何想法为什么?

【问题讨论】:

可能是 SQL 错误。看看$stmt->errorInfo 看起来你的意思是使用 $_FILES['file']['name'] 而不是 $_POST['file']['name'] 但这不会导致插入失败,只是一个空白值,除非 picture 列是 NOT NULL @MichaelBerkowski 当然,根据列,有一个空白值会影响INSERT 除非图片不能为空。那么查询就会失败。也许 Ben 可以发布表模式? 请注意:使用用户提供的名称将文件保存在服务器上并不是一个好主意。而是为其生成一个随机名称。 【参考方案1】:

试试

move_uploaded_file($_FILES["file"]["tmp_name"], "../img/" . $_FILES["file"]["name"]);
$stmt = $conn->prepare('INSERT INTO instructors (name, bio, picture) VALUES (:name, :bio, :picture)');
$stmt->bindParam(':name', $_POST['name']);
$stmt->bindParam(':bio', $_POST['bio']);
$stmt->bindParam(':picture', $_POST['filename']);// Only 1 set of []s in $_POST[]
$stmt->execute();

【讨论】:

【参考方案2】:

我相信你应该这样做:

move_uploaded_file($_FILES["file"]["tmp_name"], "../img/" . $_FILES["file"]["name"]);
$stmt = $conn->prepare('INSERT INTO instructors (name, bio, picture) VALUES (:name, :bio, :picture)');

$stmt->execute(array(
    ':name'=> $_POST['name'],
    ':bio'=> $_POST['bio'],
    ':picture'=> $_POST['file']['name']
));

【讨论】:

为什么是负面的?这来自 php 手册,他说“如果我在查询字符串中使用变量名,如 INSERT INTO table (name, comment) VALUES ($name, $comment) 就可以了”,所以问题不在于名称列或空值作为 sugested ... 我没有投反对票,但样板示例是多余的,应该删除。 好的,谢谢你的建议,只留下了作者代码的建议

以上是关于无法使用 php 的 PDO 将数据插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO 和 PHP 将表单中的数据插入 MySQL 数据库

使用 PDO 从 php 页面将具有更多列的表单数据插入 mysql 数据库

没有抛出错误,但数据没有插入数据库(PHP PDO)[重复]

使用 PHP PDO 解码后将整个 JSON 插入数据库

如何使用 PDO 从 php 文件中插入数据?

无法使用 PDO 插入 MySQL 数据库....没有错误