Php MySQL赢得';t将for循环中的最后一项插入数据库

Php MySQL赢得';t将for循环中的最后一项插入数据库,php,mysql,loops,Php,Mysql,Loops,我正在循环一些数据以显示在我的页面上,然后将每个循环插入数据库中的一行(PHP和MySQL的个人学习练习) for循环运行了5次(例如,有时它可能会多/少循环),我能够成功地插入前4个循环的数据,但我很难弄清楚最后一个循环为什么不会插入数据库 所有5个循环迭代都显示在我的页面上,我不太清楚为什么最后一个循环不会插入到数据库中 下面是我的for循环,其中包括MySQL代码: $artworksIterations=1 count($artworksTitle[$x])=5 for ($x = 0;

我正在循环一些数据以显示在我的页面上,然后将每个循环插入数据库中的一行(PHP和MySQL的个人学习练习)

for
循环运行了5次(例如,有时它可能会多/少循环),我能够成功地插入前4个循环的数据,但我很难弄清楚最后一个循环为什么不会插入数据库

所有5个循环迭代都显示在我的页面上,我不太清楚为什么最后一个循环不会插入到数据库中

下面是我的
for
循环,其中包括MySQL代码:

$artworksIterations=1

count($artworksTitle[$x])=5

for ($x = 0; $x < $artworksIterations; $x++) {
    for ($y = 0; $y < count($artworksTitle[$x]); $y++) {
        $savedartworksTitle = $artworksTitle[$x][$y];
        echo "TITLE: " . $savedartworksTitle . "<br>";
        $savedartworksArtist = $artworksArtist[$x][$y];
        echo "ARTIST: " . $savedartworksArtist . "<br>";
        $savedartworksYear = $artworksYear[$x][$y];
        echo "YEAR: " . $savedartworksYear . "<br>";
        $savedartworksMedium = $artworksMedium[$x][$y];
        echo "MEDIUM: " . $savedartworksMedium . "<br>";
        $implodeGene = implode(", ", $artworksGene[$x][$y]);
        echo "GENRES: " . $implodeGene;
        $savedartworksDisplay = $artworksDisplay[$x][$y];
        echo "<br><img src='" . $savedartworksDisplay . "'><br>";
        echo "<br>----<br>";
        $sql = "INSERT INTO Artworks (title, artist, year, medium, display, genres) VALUES ('$savedartworksTitle', '$savedartworksArtist', '$savedartworksYear', '$savedartworksMedium', '$savedartworksDisplay', '$implodeGene');";
        mysqli_query($conn, $sql);
    } // end of y
} // end of x
for($x=0;$x<$artworksIterations;$x++){
对于($y=0;$y<计数($artworksTitle[$x]);$y++){
$savedartworksTitle=$artworksTitle[$x][$y];
回显“标题:.$savedartworksTitle.”
“; $savedartworksArtist=$artworksArtist[$x][$y]; echo“艺术家:.”savedartworksArtist.“
”; $savedartworksYear=$artworksYear[$x][$y]; 回声“年:.$savedartworksYear.”
“; $savedartworksMedium=$artworksMedium[$x][$y]; echo“介质:.$savedartworksMedium.”
“; $IMPODEGENE=内爆(“,”,$artworksGene[$x][$y]); echo“流派:”.$内爆基因; $savedartworksDisplay=$artworksDisplay[$x][$y]; 回声“

”; 回声“
----
”; $sql=“插入艺术品(标题、艺术家、年份、媒体、显示、流派)值(“$savedartworksTitle”、“$savedartworksArtist”、“$savedartworksYear”、“$savedartworksMedium”、“$savedartworksDisplay”、“$introdegene”);”; mysqli_查询($conn,$sql); }//y的结尾 }//x的结尾

任何帮助都将不胜感激。谢谢:)

感谢所有帮助我剖析问题的人

结果证明,仅仅是巧合,每次迭代的最后一个循环中的数据都包含一个撇号('),这就是为什么它们没有插入到数据库中(语法错误)

感谢Jacques指出我应该检查错误,这就是它通知我语法错误的地方(同时,感谢jeff坚持我的撇号问题)

为了解决这个问题,我使用了
mysqli\u real\u escape\u string()
函数将数据保存为数据库的安全格式(可能是我首先应该做的事情,学习经验!)

更新的工作代码:

for ($x = 0; $x < $artworksIterations; $x++) {
    for ($y = 0; $y < count($artworksTitle[$x]); $y++) {
        // display the information on the web page
        echo "TITLE: " . $artworksTitle[$x][$y] . "<br>";
        echo "ARTIST: " . $artworksArtist[$x][$y] . "<br>";
        echo "YEAR: " . $artworksYear[$x][$y] . "<br>";
        echo "MEDIUM: " . $artworksMedium[$x][$y] . "<br>";
        echo "GENRES: " . implode(", ", $artworksGene[$x][$y]);
        echo "<br><img src='" . $artworksDisplay[$x][$y] . "'><br>";

        // save data to MySQL safe format
        $savedartworksTitle = mysqli_real_escape_string($conn, $artworksTitle[$x][$y]);
        $savedartworksArtist = mysqli_real_escape_string($conn, $artworksArtist[$x][$y]);
        $savedartworksYear = mysqli_real_escape_string($conn, $artworksYear[$x][$y]);
        $savedartworksMedium = mysqli_real_escape_string($conn, $artworksMedium[$x][$y]);
        $savedartworksDisplay = mysqli_real_escape_string($conn, $artworksDisplay[$x][$y]);
        $implodeGene = mysqli_real_escape_string($conn, implode(", ", $artworksGene[$x][$y]));

        // insert data into database
        $sql = "INSERT INTO Artworks (title, artist, year, medium, display, genres) VALUES ('$savedartworksTitle', '$savedartworksArtist', '$savedartworksYear', '$savedartworksMedium', '$savedartworksDisplay', '$implodeGene');";
        if (mysqli_query($conn, $sql) === FALSE) {
            printf("ERROR: %s\n", mysqli_error($conn));
        }
        echo "<br>----<br>";
    } // end of y
} // end of x
for($x=0;$x<$artworksIterations;$x++){
对于($y=0;$y<计数($artworksTitle[$x]);$y++){
//在网页上显示信息
回声“标题:”..artworksTitle[$x][$y]。“
”; 回声“艺术家:”.$artworksArtist[$x][$y]。“
”; 回音“年:”.$artworksYear[$x][$y]。“
”; 回声“介质:”..artworksMedium[$x][$y]。“
”; 回声“流派:”。内爆(“,”,$artworksGene[$x][$y]); 回声“

”; //将数据保存为MySQL安全格式 $savedartworksTitle=mysqli\u real\u escape\u字符串($conn,$artworksTitle[$x][$y]); $savedartworksArtist=mysqli\u real\u escape\u字符串($conn,$artworksArtist[$x][$y]); $savedartworksYear=mysqli\u real\u escape\u字符串($conn,$artworksYear[$x][$y]); $savedartworksMedium=mysqli\u real\u escape\u字符串($conn,$artworksMedium[$x][$y]); $savedartworksplay=mysqli\u real\u escape\u字符串($conn,$artworksplay[$x][$y]); $introdegene=mysqli\u real\u escape\u字符串($conn,introde(“,”,$artworksGene[$x][$y]); //将数据插入数据库 $sql=“插入艺术品(标题、艺术家、年份、媒体、显示、流派)值(“$savedartworksTitle”、“$savedartworksArtist”、“$savedartworksYear”、“$savedartworksMedium”、“$savedartworksDisplay”、“$introdegene”);”; if(mysqli_查询($conn,$sql)==FALSE){ printf(“错误:%s\n”,mysqli_错误($conn)); } 回声“
----
”; }//y的结尾 }//x的结尾
显示echo$sql的输出。此外,尝试在循环后提交更改。是否可能存在重复的数据?
如果重复的
主键
,则插入到
将失败。你能验证你的表
Artwoks
是否有这样一个
主键
,并且你的数据是唯一的吗?@JacquesSamar我将
主键
链接到第一列id。这是db()的表结构。@MichaelO。只是尝试一下:回显
$sql
确实会显示最终的循环迭代,它与前面的循环完全匹配。不确定为什么不将其插入数据库…请改用参数化查询