Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL insert stmt不会在文件上传foreach循环中循环_Php - Fatal编程技术网

Php MySQL insert stmt不会在文件上传foreach循环中循环

Php MySQL insert stmt不会在文件上传foreach循环中循环,php,Php,代码上载文件,并将文件路径提交到数据库,以便我可以在其他地方使用文件路径 所有文件在循环中都可以正常上载,但由于某些原因,在成功提交第一个MySQL stmt插入后,它会以某种方式绕过再次通过循环时出现的插入,以上载$\u files[]superglobal中的下一个文件 这是表单的标记 <?php session_start(); include 'includes/functions.php'; drawHeader(); echo' <div class="

代码上载文件,并将文件路径提交到数据库,以便我可以在其他地方使用文件路径

所有文件在循环中都可以正常上载,但由于某些原因,在成功提交第一个MySQL stmt插入后,它会以某种方式绕过再次通过循环时出现的插入,以上载
$\u files[]
superglobal中的下一个文件

这是表单的标记

<?php
session_start();
include 'includes/functions.php';
drawHeader();


echo'
  <div class="main_content_container">
';

if ( isset($_SESSION['userId'])) {

  $amz_numb = $_GET['amz_numb'];

  echo'
    <form action="http://Localhost/Tierrashop.ca/includes/upload.php"
      method="post" enctype="multipart/form-data">

      Send these files

      <input name="amz_numb" type="hidden"
      value="'. $amz_numb .'"/><br />

      <input name="file[]" type="file" /><br />
      <input name="file[]" type="file" /><br />
      <input name="file[]" type="file" /><br />
      <input name="file[]" type="file" /><br />
      <input name="file[]" type="file" /><br />
      <input name="file[]" type="file" /><br />
      <input name="file[]" type="file" /><br />
      <input name="file[]" type="file" /><br />

      <button type="file">Upload Files</button>
    </form>

    <a href="http://localhost/Tierrashop.ca/content_upload.php">
    <button>Go back to product details... </button></a>
  ';



} else {
  echo '';
}

//close of main content div
echo '</div>';

drawFooter();
?>


提交表单时启动的PHP文件

<?php

include 'config.php';
if (isset($_POST['amz_numb'])) {
    $uploadlocation = "../product_images/";

    $amz_numb = $_POST['amz_numb'];

    // Count total files
    $countfiles = count($_FILES['file']['name']);

    // Looping all files
    for ($i = 0; $i < $countfiles; $i++) {
        $filename = $_FILES['file']['name'][$i];

        // Upload file
        move_uploaded_file($_FILES['file']['tmp_name'][$i], $uploadlocation . $filename);
        $directory_location = $uploadlocation . basename($filename);
        chmod($directory_location, 0644);

        //insert amz numb and path into db
        $stmt = mysqli_prepare($conn, "INSERT INTO images ( amz_product_code, filepath )
    VALUES (?,?)");
        mysqli_stmt_bind_param($stmt, 'ss', $amz_numb, $directory_location);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_close($stmt);
    }
    mysqli_close($conn);
}

请看一下这个:

用户提供的注释可能对您的案例有所帮助:

“如果您在循环中使用bind_param等重复一条语句以进行更大的操作。我认为使用stmt->close清除它会很好。但在大约250次操作后,它总是会因错误而中断。当我尝试使用stmt->reset时,它对我有效。”

这可能是更好的选择:

或者-更好-使用PDO

更新:更多关于PDO的信息

如果您不知道如何使用更现代的标准“PDO”(如果我没记错的话,它代表“PHP数据对象”),这将非常有用。我自己用它来制作自己的数据库处理程序。

唯一需要注意的是:上面的链接有点以美国为中心。如果你像这样使用它,如果你支持英语以外的其他语言(美国),你就会遇到麻烦

在//定义配置中,应添加:

define("DB_CHARSET",        "utf8mb4");
private $charset = DB_CHARSET;
然后在数据库类本身中,您应该添加:

define("DB_CHARSET",        "utf8mb4");
private $charset = DB_CHARSET;
因此,“设置DSN”应修改如下:

 $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname . ';charset=' . $this->charset;

除了这些小改动外,该示例仍然非常有用。

请看一下:

用户提供的注释可能对您的案例有所帮助:

“如果您在循环中使用bind_param等重复一条语句以进行更大的操作。我认为使用stmt->close清除它会很好。但在大约250次操作后,它总是会因错误而中断。当我尝试使用stmt->reset时,它对我有效。”

这可能是更好的选择:

或者-更好-使用PDO

更新:更多关于PDO的信息

如果您不知道如何使用更现代的标准“PDO”(如果我没记错的话,它代表“PHP数据对象”),这将非常有用。我自己用它来制作自己的数据库处理程序。

唯一需要注意的是:上面的链接有点以美国为中心。如果你像这样使用它,如果你支持英语以外的其他语言(美国),你就会遇到麻烦

在//定义配置中,应添加:

define("DB_CHARSET",        "utf8mb4");
private $charset = DB_CHARSET;
然后在数据库类本身中,您应该添加:

define("DB_CHARSET",        "utf8mb4");
private $charset = DB_CHARSET;
因此,“设置DSN”应修改如下:

 $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname . ';charset=' . $this->charset;

除了这些微小的变化,这个例子仍然非常有用。

Yaaaaa,所有这些都没有帮助

我发现你不必一直准备陈述,但是不确定这是否是阻止陈述的原因

我让它上传文件,然后准备stmt执行

在php.ini文件中,我有: max_file_uploads=3,这解释了为什么只插入三个文件并将脚本锁定在循环中


此外,我还更改了post_max_size=150mb,认为这样可以将所有这些文件存储在$_filessuperglobal的tmp_name键中,所有这些重置操作都没有帮助

我发现你不必一直准备陈述,但是不确定这是否是阻止陈述的原因

我让它上传文件,然后准备stmt执行

在php.ini文件中,我有: max_file_uploads=3,这解释了为什么只插入三个文件并将脚本锁定在循环中


此外,我还更改了post_max_size=150mb,认为这样可以将所有这些文件存储在$_filessuperglobal的tmp_name键中,并在这个答案的最后一句中加下划线并在答案的最后一句加下划线
;-)