我编写了一个文件上传代码,可自动创建用于存储文件的文件夹。现在我想将每个文件名存储到某个表中。顺便说一下,该表有一个文件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部分不起作用。
答案 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();