将文件名存储到Mysql表中

时间:2013-11-23 12:48:08

标签: php mysql

我编写了一个文件上传代码,可自动创建用于存储文件的文件夹。现在我想将每个文件名存储到某个表中。顺便说一下,该表有一个文件ID的自动增量列和文件名本身的img_link。这是我写的代码。

<?php
session_start();
$table_name = $_SESSION['un'];
if (!is_dir($table_name)) {
    mkdir($table_name);
}
$dir = $table_name . '/';
if (isset($_FILES["myfile"])) {
    $ret = array();
    $error = $_FILES["myfile"]["error"];
    {
        if (!is_array($_FILES["myfile"]['name'])) {
            $fileName = $_FILES["myfile"]["name"];
            move_uploaded_file($_FILES["myfile"]["tmp_name"], $dir . $_FILES["myfile"]["name"]);
            $ret[$fileName] = $dir . $fileName;
        } else {
            $fileCount = count($_FILES["myfile"]['name']);
            $connect = mysql_connect("localhost", "root", "") or die(mysql_error());
            mysql_select_db("mdrusr") or die(mysql_error());
            for ($i = 0; $i < $fileCount; $i++) {
                $fileName = $_FILES["myfile"]["name"][$i];
                echo $_FILES["myfile"]["name"][$i];
                $ret[$fileName] = $dir . $fileName;
                move_uploaded_file($_FILES["myfile"]["tmp_name"][$i], $dir . $fileName);
                mysql_query("INSERT INTO $table_name (img_link) VALUES ('$fileName')", $connect);
            }

        }
    }
    echo json_encode($ret);
}
?>

但是mysql_query部分不起作用。

1 个答案:

答案 0 :(得分:1)

函数调用看似错误

mysql_query($connect, "INSERT INTO $table_name SET img_link='$fileName'");

$ connect首先

也不确定您的查询是否有效sql

正如我所写,它应该是正确的。

最后强烈建议使用 mysqli 而不是 mysql 一组php函数(不推荐使用mysql)

使用预准备语句而不是将变量内容直接注入到查询中。

例如:如果文件名包含单引号会怎样?例如

jenny的data.txt

查询搞砸了。

所以要以正确的方式做事:

$connect = mysqli_connect("localhost", "root", "", "mdrusr"); // what about a password?
                                                              // note the db selection

if(!$connect) {...}

$query = $connect->prepare("INSERT INTO ? SET img_link=?");
if(!$query)   {...}

$query->bind_param("ss", $table_name, $fileName);

$query->execute();

$query->close();

/* .... */

$connect->close();