我是PHP的新手,正在尝试按照在线教程制作Android音乐播放器。该PHP将连接到我的数据库,扫描目录中的* .mp3文件,并将其添加到数据库中。无论如何,我被困在最后一部分,我连接,扫描文件,在屏幕上看到输出,然后在尝试填充数据库时出现此错误。我已经读到很多有关导致错误的数组问题的信息,但我不知道如何进一步解决。仅供参考,DB列ID是主键,设置为auto inc。感谢您的帮助!这是代码: 建立与DB /
的连接$con = mysqli_connect('localhost', "xxxxxx", "xxxxxx", "MusicApp2");
/*Test connection*/
if(mysqli_connect_errno()){
printf("connection failed: %s\n", mysqli_connect_error());
exit();
}
/*Scan directory for files*/
$files = glob('*.mp3');
usort ($files, function ($a, $b) {
return filemtime ($a) <filemtime ($b);
});
/*Insert list of files to DB IF they don't exist*/
$i = 0;
while ($files[$i]) {
$trackname = basename($files[$i]);
echo $trackname."**";
$addquery = "INSERT INTO music (Id, trackname, numlikes, numplays) VALUES (default, '$trackname', '0', '0')";
mysqli_query($con, $addquery);
$i++;
}
?>
我得到了最终导入数据库的代码。这是结果代码。
foreach ($files as $file) {
$trackname = basename($file);
echo $trackname."**";
$addquery = "INSERT INTO Music (trackname, numlikes, numplays) VALUES ('$trackname', '0', '0')";
mysqli_query($con, $addquery);
$result = mysqli_query($con, $addquery);
If ($result)
{
echo "Success";
}
else
{
echo "Error: " . "<br>" . mysqli_error($con);
}
}
mysqli_close($con);
?>
答案 0 :(得分:1)
您的文件夹中没有39个以上的文件。
您可以将while
替换为foreach
foreach ($files as $file) {
$trackname = basename($file);
echo $trackname."**";
$addquery = "INSERT INTO music (trackname, numlikes, numplays) VALUES ('$trackname', '0', '0')";
mysqli_query($con, $addquery);
}
这样,您将仅迭代拥有的文件,而不会抛出拥有的通知。
如果您仍然想使用while
,请确保有一个停止点:
while ($files[$i]) {
if(!isset$files[$i]) {
break;
}
....
如果ID为自动递增列,则无需在插入内容中指定ID列:
INSERT INTO music (trackname, numlikes, numplays) VALUES ('$trackname', '0', '0')
答案 1 :(得分:0)
此行:
while ($files[$i]) {
当您越过$files
数组的末尾时,将显示此警告。如果有39个文件,则$files[39]
不存在,因此尝试访问该文件将报告索引未定义。然后测试将失败,并且循环将按预期停止。
您应该测试元素是否存在,而不是测试值本身:
while (isset($files[$i])) {
或者您可以使用更普通的foreach
循环,如Felippe Duarte的答案。