Php bindValue与文件一起并将变量发布到SQL DB中

Php bindValue与文件一起并将变量发布到SQL DB中,php,mysql,Php,Mysql,我似乎无法将所有这些变量都发布到我的数据库中。当我省略$file\u desc的$\u POST时,它会起作用。所有$\u文件变量都会传递到我的数据库。以下是获取变量的代码: $file_name = $_FILES['image']['name']; $tmp = explode('.', $file_name); $file_ext = strtolower(end($tmp)); $file_size = $_FILES['image']['size']; $file_tmp = $_FI

我似乎无法将所有这些变量都发布到我的数据库中。当我省略
$file\u desc
$\u POST
时,它会起作用。所有
$\u文件
变量都会传递到我的数据库。以下是获取变量的代码:

$file_name = $_FILES['image']['name'];
$tmp = explode('.', $file_name);
$file_ext = strtolower(end($tmp));
$file_size = $_FILES['image']['size'];
$file_tmp = $_FILES['image']['tmp_name'];
$file_error = $_FILES['image']['error'];
$file_desc = nl2br($_POST['desc']);
下面是运行查询的代码:

$query = $pdo->prepare('INSERT INTO upload (name, type, size, desc) VALUES (?, ?, ?, ?)');
$query->bindValue(1, $file_name);
$query->bindValue(2, $file_ext);
$query->bindValue(3, $file_size);
$query->bindValue(4, $file_desc);

$query->execute();

DESC
是MySQL关键字,用于按降序对所选行进行排序。在您的例子中,MySQL认为它是关键字而不是字段名。为了让它明白这是一个字段,你应该把它放在撇号中:

$query = $pdo->prepare('INSERT INTO upload (name, type, size, `desc`) VALUES (?, ?, ?, ?)');

此外,我还建议您学习调试并注意返回的错误:我打赌MySQL告诉过您“第1行desc附近的语法错误”。

太好了!这非常有效。最好是更改字段的名称。但作为一个快速解决方案,这是有效的。谢谢你的建议,我是这个东西的初学者,所以我会继续尝试。虽然在本例中,没有返回任何错误。没有发布任何内容。是的,在这种情况下更改表字段似乎很好。但使用撇号是强调表字段的常见做法,有时您也确实希望关键字成为字段名,例如
password
。至于调试,您可以尝试
print\r($query->errorInfo())以查看您的错误。