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

无法使用php的PDO将数据插入数据库,php,mysql,insert,pdo,Php,Mysql,Insert,Pdo,我制作了一个表单,一旦提交,就应该将数据插入数据库。如果我在查询字符串中使用变量名,如INSERT INTO table name、comment VALUES$name、$comment,它就可以工作,但是如果我使用pdo PREADED语句,它就不工作了,下面是我当前拥有的代码: move_uploaded_file($_FILES["file"]["tmp_name"], "../img/" . $_FILES["file"]["name"]); $stmt = $conn->pre

我制作了一个表单,一旦提交,就应该将数据插入数据库。如果我在查询字符串中使用变量名,如INSERT INTO table name、comment VALUES$name、$comment,它就可以工作,但是如果我使用pdo PREADED语句,它就不工作了,下面是我当前拥有的代码:

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();

文件get已上载并移动到我指定的目录,但没有数据插入到数据库中。你知道为什么吗?

我认为你应该这样做:

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']
));
试一试


可能是SQL错误。请看一下$stmt->errorInfo。看起来您的意思是使用$\u FILES['file']['name']而不是$\u POST['file']['name'],但这不会导致插入失败,除非picture列不为NULL,否则仅为空值。@MichaelBerkowski当然,根据列的不同,有空值会影响插入?除非picture不能为NULL。那么查询就会失败。也许Ben可以发布这个表模式?请注意:用用户提供的名称在服务器上保存文件不是一个好主意。为它生成一个随机名称。为什么是负数?这来自php手册,他说如果我在查询字符串中使用变量名,比如INSERT INTO table name,comment VALUES$name,$comment,那么它是有效的,所以问题不在于列的名称或所建议的空值……我没有投票反对,但样板示例是无关的,应该删除。好的,谢谢你的建议,只留下了作者代码的建议
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();