无法使用 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 数据库