我正在尝试插入一个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();
答案 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();