当查询本身有效时,为什么php脚本中的这个查询不起作用?

时间:2016-09-23 17:55:28

标签: php mysql

我正在尝试使用PHP表单上传文件。

文件上传正确,但由于某种原因我不能做的是将文件的名称保存到数据库中。

这就是我正在做的事情:

if (move_uploaded_file($tmp_name, "$root/docsCursos/$archivoFinal")) {
    $conectar = new PDO('mysql:host='.HOST.'; dbname='.DATABASE.'; charset=utf8', USER, PASS); 
    $guardarArchivo = $conectar->prepare('UPDATE contenidos
                                        SET archivoContenido="$archivoFinal"
                                        WHERE contenidoID=$contenidoID
                                        ');
    $guardarArchivo->execute();         
    echo 'Se cargo el archivo '.$archivoFinal.'<br>';
}

我检查了什么:

回声线“Se cargo el archivo ...”打印出来。

文件将保存到文件夹中。

表格和列的名称是正确的。

当我尝试手动将查询输入phpMyAdmin时,它可以正常工作,所以我猜这个查询没问题。

我已经尝试准备语句而不是直接使用变量,但由于它不起作用,我认为如果我直接尝试查询会更容易找到错误。

数据库连接确实有效,因为它在同一个文件中使用并且没有关闭。

我已经在屏幕上打印出查询本身以查看变量是否已打印且它们不是空的,并且它们会被打印出来。

错误日志没有显示任何内容。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

问题在于您是否尝试在单引号内引用变量,而PHP只是按字面解释。

$guardarArchivo = $conectar->prepare($sql = "UPDATE contenidos
                                    SET archivoContenido='$archivoFinal'
                                    WHERE contenidoID=$contenidoID
                                    ");

当您手动尝试查询时,如果您说查询有效,那么您就不会犯这个错误。一个好的调试技巧是将编译后的查询分配给var,如上所述,然后输出 - 然后你就会立即发现问题:

echo $sql; //<-- oh-uh, obvious problem