【问题标题】:Inserting multiple records into MySQL from an array从数组中将多条记录插入 MySQL
【发布时间】:2015-01-01 00:00:58
【问题描述】:

我正在通过下面的代码上传多张图片(它有效),但我无法将这些图片的网址插入到我的数据库中。我尝试了几件事,但无法使其工作。我的代码还没有完成,所以我还没有添加控件(文件类型、文件大小等)。

index.php

<form action="upload.php" method="post" enctype="multipart/form-data"> 
    <div id="file_container">
        <input name="images[]" multiple type="file" id="file[]"/><br/>
        <input type="submit">
    </div>
</form>

上传.php

$target = "upload/";
$test = 1;

foreach ($_FILES['images']['name'] as $key => $value) {
    $path = $_FILES['images']['name'][$key];
    $ext = pathinfo($path, PATHINFO_EXTENSION); // getting the extension

    // creating a unique value here
    $name = md5($name);
    $generate1 = md5(date('Y-m-d H:i:s:u'));
    $randomizer = uniqid($name);
    $name = $name . $generate1 . $randomizer;
    $makeaname = $target . $name . "." . $ext;

    if ($test == 1) {
        if (move_uploaded_file($_FILES['images']['tmp_name'][$key], $makeaname)) {
            echo "<strong>" . $value . "</strong> successful <br />\n";
            echo $makeaname; // it echoes image urls, so everything is okay so far.
        }
    } else {
        echo "Failed";
    }

我在echo $makeaname; 之后的foreach 循环中使用了下面的查询,但它不起作用。我感谢任何形式的帮助或指导。

$upload_image = $sqli->prepare("INSERT INTO images(image_value, type, size) VALUES (?,?,?)");
$upload_image->bind_param("sss", $makeaname, $_FILES['images']['type'], $_FILES['images']['size']);
$upload_image->execute();

【问题讨论】:

  • $makeaname 是文件名的字符串,而不是实际文件。首先,您需要将您的 bind_param 调用从“sss”修改为“bss”,其次您需要提供实际文件。见blogs.oracle.com/oswald/entry/php_s_mysqli_extension_storing
  • 您是否检查过查询中的错误消息?另外,这 $_FILES['images']['type'] 在您的绑定语句中是否正确?` 换句话说,它应该是 $_FILES['images']['type'][$key] 吗?
  • @Gohn67,谢谢。现在可以完美地添加大小和类型列。我还注意到我忘记在文件顶部包含 connect.php 文件,这是我在 2015 年做过的最愚蠢的事情。我对此表示祝贺。

标签: php mysql arrays mysqli


【解决方案1】:

您需要索引$_FILES 数组。此外,您不需要为 NULL 值绑定参数,在 SQL 中使用 NULL 文字(或者,如果这是架构中的默认值,您可以完全忽略该值)。

upload_image = $sqli->prepare("INSERT INTO images(image_value, type, size) VALUES (NULL,?,?)");
$upload_image->bind_param("ss", $type, $size);
foreach ($_FILES['images']['type'] as $i => $type) {
    $size = $_FILES['images']['size'][$i];
    $upload_image->execute();
}

【讨论】:

  • 谢谢。我已经解决了我的问题,但是索引 $_FILES 数组是我在这里学到的。谢谢。 (您可以阅读我上面的评论,关于问题的最后一条)
【解决方案2】:

确保您的数据库列“image_value”是 BLOB 数据类型。然后试试这个代码:

$null = NULL;
$upload_image = $sqli->prepare("INSERT INTO images(image_value, type, size) VALUES (?,?,?)");
$upload_image->bind_param("bss", $null, $_FILES['images']['type'], $_FILES['images']['size']);
$upload_image->send_long_data(0, file_get_contents($makeaname));
$upload_image->execute();

【讨论】:

  • 请不要误会我的意思,但我做不到。它给了我一个数组 - 字符串转换错误。不过,我正在努力。感谢您的宝贵时间。
猜你喜欢
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
相关资源
最近更新 更多