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