【问题标题】:insert into database mysqli prepared statement插入数据库 mysqli 准备好的语句
【发布时间】:2016-04-05 11:53:44
【问题描述】:

我正在尝试将图像上传到我的服务器并将其名称和路径保存到我的数据库中。将文件上传到我的服务器有效,将数据保存在数据库中无效。

图像表

image_id    int(11)      
image_name  varchar(64)          
image_path  varchar(64)


上传脚本

    // Upload image to the server
    $target_dir = "./path/to/image/folder/";
    $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
    $uploadOk = 1;
    $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);

    // Check if image file is a actual image or fake image
    if(isset($_POST["submit"])) {
        $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
        if($check !== false) {
            $uploadOk = 1;
        } else {
            echo "Die Datei ist keine Bilddatei.";
            $uploadOk = 0;
        }
    }

    // Check if file already exists
    if (file_exists($target_file)) {
        echo "Bitte nenne die Datei um, diese Datei existiert bereits.";
        $uploadOk = 0;
    }

    // Check file size
    if ($_FILES["fileToUpload"]["size"] > 500000) {
        echo "Diese Datei ist größer als 5MB und kann daher nicht hochgeladen werden.";
        $uploadOk = 0;
    }

    // Allow certain file formats
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) {
        echo "Ausschließlich JPG, JPEG, PNG & GIF Dateien können hochgeladen werden.";
        $uploadOk = 0;
    }

    // Check if $uploadOk is set to 0 by an error
    if ($uploadOk == 0) {
        echo "Ein Fehler ist aufgetreten. Die Datei konnte nicht hochgeladen werden.";
    // if everything is ok, try to upload file
    } else {
        ========================= DATABASE PART ========================
        // create a database connection
        $conn = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);

        // prepare and bind
        $stmt = $conn->prepare("INSERT INTO images (image_id, image_name, image_path) VALUES (?, ?, ?)");
        $stmt->bind_param("iss", $image_id, $image_name, $image_path);

        // set parameters and execute
        $image_id = '';
        $image_name = $target_file;
        $image_path = $target_dir;
        $stmt->execute();

        $stmt->close();
        $conn->close();
        ==================================================================

        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {            
            header("Location:http://homepage.com");
        } else {
            echo "Während des Hochladens der Bilddatei ist ein Fehler aufgetreten. Bitte versuche es erneut.";
        }
    }



文件完全按照应有的方式上传。

数据库保持为空,没有错误消息。

$image_name 和 $image_path 上的 var_dump 返回正确的值。

我错过了什么?

我会非常感谢任何形式的帮助。谢谢!

【问题讨论】:

标签: php mysql file-upload mysqli prepared-statement


【解决方案1】:

代替:

// prepare and bind
        $stmt = $conn->prepare("INSERT INTO images (image_id, image_name, image_path) VALUES (?, ?, ?)");
        $stmt->bind_param("iss", $image_id, $image_name, $image_path);

        // set parameters and execute
        $image_id = '';
        $image_name = $target_file;
        $image_path = $target_dir;
        $stmt->execute();

试试:

// set parameters and execute
$image_id = '';
$image_name = $target_file;
$image_path = $target_dir;

// prepare and bind
$stmt = $conn->prepare("INSERT INTO images (image_id, image_name, image_path) VALUES (?, ?, ?)");
$stmt->bind_param("iss", $image_id, $image_name, $image_path);

代码执行的顺序是从上到下。 现在你在没有设置变量的时候调用它们。

【讨论】:

猜你喜欢
  • 2014-03-16
  • 2012-12-01
  • 1970-01-01
  • 2014-03-29
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
相关资源
最近更新 更多