尝试执行INSERT命令时,PDO不起作用

时间:2018-10-08 08:22:16

标签: php mysql pdo

我正在尝试插入一个SQL查询,但是它不起作用-我没有错误,$pdo->errorInfo();仅返回Array,在mysql中什么也看不到! 我100%确保设置了$ text,$ file和$ title(我已经用echo进行了检查)在每个其他php文件中,此pdo连接都可以与include一起使用,但不能在 dev.php 我应该怎么做?

datenbank.php

<?php
$pdo = new PDO('mysql:host=localhost;dbname=db', 'user', 'password');
?>

dev.php

include("datenbank.php");
// Prepare an insert statement
$post = $pdo->prepare("INSERT INTO news (text, date, file, title) VALUES ($text, NOW(), $file, $title)");
$post->execute(); 
$help = $pdo->errorInfo();

2 个答案:

答案 0 :(得分:1)

您不要在prepare PDO语句中使用参数标记。使用PDO扩展名准备查询时,需要在查询语句中放置标记,并在execute函数中像关联数组一样指示这些标记的值。

您可以使用:marker之类的标记或?之类的问号,您的查询将如下所示:

include("datenbank.php");
// Prepare an insert statement with marks params
$post = $pdo->prepare(INSERT INTO news (text, date, file, title) VALUES (:text, NOW(), :file, :title));
//execute statements with the marks values in prapare function params
$post->execute(array(':text' => $text, ':file' => $file, ':title' => $title)); 

编辑:PD:这样可以防止SQL插入。......

答案 1 :(得分:0)

对于字符串值,您需要引用

$post = $pdo->prepare("INSERT INTO news (text, date, file, title) 
   VALUES ('$text', NOW(),'$file', '$title')");

无论如何,您都不应该在sql中使用php var,否则您有可能遭受sqlinjection的威胁。请改用预处理语句和绑定参数

$stmt = $conn->prepare("INSERT INTO news (text, date, file, title) 
         VALUES (:text, NOW(), :file, :title)");
$stmt->bindParam(':text', $text);
$stmt->bindParam(':file', $file);
$stmt->bindParam(':title', $title);

 $stmt->execute();