插入数据库mysqli预编译语句

时间:2015-12-31 14:13:34

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

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

图片表

    // 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和onComplete返回正确的值。

我错过了什么?

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

1 个答案:

答案 0 :(得分:3)

而不是:

// 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);

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