Insert_id无法在服务器上传的Web上运行

时间:2016-09-18 01:06:21

标签: php mysqli ubuntu-server

我已经雇用了Cloudatcost,我已经配置了一个Ubuntu服务器,安装了LAMP并上传了我的网页。 我有一个部分,我上传一些文本字段和一个图像,问题是图像没有上传,但当我在本地运行我的页面时,它工作。

我的插入代码如下:

    function insert($title, $intro, $body, $data ,$date, $someid, $Myimage, $somesection){

    $ID = null;
    $mysqli = openConnection(); <- starts connection
    $query = "INSERT INTO columnsa (title, intro, body, data, date, someid) VALUES (?, ?, ?, ?, ?, ?)"; 
    if ($stmt = $mysqli->prepare($query))
    {
        $stmt->bind_param(

'sssssi', $title, $intro, $body, $data, $date, $someid);        
        /* Execution*/
        $stmt->execute();

        $ID = $mysqli->insert_id;
        /* Close query */
        $stmt->close();
    }
    if($ID)
    {
        if ($image != null) {
            insertImg($image, $ID, $section);
            closeConnection($mysqli);   
            return true;
        }
    }
    else
    {
        closeConnection($mysqli);
        return false;
    }
}

我的插入图片是:

    function insertImg($image, $ID, $section)
    {
        switch ($seccion) {
            case "journey":
                move_uploaded_file($imagen['tmp_name'], "../../img/journeys/".$ID.".jpg");
                break;
            case "column":
                move_uploaded_file($imagen['tmp_name'], "../../img/bolumns/".$ID.".jpg");
                break;
        case "blog":
            move_uploaded_file($imagen['tmp_name'], "../../img/blogs/".$ID.".jpg");
            break;
    }
}

我猜我也许忘记安装一个php5模块,因为行

$ID = $mysqli->insert_id;
        /* Close query */
        $stmt->close();
    }
    if($ID)
    {
        if ($image != null) {
            insertImg($image, $ID, $section);
            closeConnection($mysqli);   
            return true;
        }
    }
    else
    {
        closeConnection($mysqli);
        return false;
    }

似乎没有用。任何php5模块包含insert_id的想法? 谢谢!

3 个答案:

答案 0 :(得分:0)

1.检查行是否插入数据库。如果它没有插入,你做错了什么。喜欢错误的查询(例如字段名称或,...)或连接问题。如果你没有数据库问题,请转到#2。

2.检查您尝试上传的文件夹是否具有以下适当的权限:

ls -l

如果没有适当的许可。读这个: https://help.ubuntu.com/community/FilePermissions

3.如果数据库和权限没有问题,则表示您尝试插入错误的文件夹。试试dirname(__FILE__)。它将获取您当前的文件目录。例如,更改此行:

move_uploaded_file($imagen['tmp_name'], "../../img/journeys/".$ID.".jpg");

move_uploaded_file($imagen['tmp_name'], dirname(__FILE__)."/../../img/journeys/".$ID.".jpg");

用于检查日志

转到此文件

sudo nano /var/log/apache2/error.log

如果您在那里找不到日志文件,请转到此文件以查找日志文件的位置:

 sudo nano /etc/php_version/apache2/php.ini

*用适当的文件夹替换php_version

答案 1 :(得分:0)

为了根据您提出的问题检索Last inserted ID,您必须运行

  1. 执行声明
  2. 查询声明
  3. 在插入后按顺序获取mysqli.*PDO顶部的最后插入的ID。

      

    在您的代码中,您必须更改如何获取最后插入的ID,因为您在执行后没有运行查询。

    <强>替换

    $ID = $mysqli->insert_id;
    

    。通过

    $ID = $stmt->insert_id;
    
      

    注意:由于您单独使用$stmt而不是使用$mysqli执行了查询,因此您需要将其更改为我所提到的。

    以下是如何根据MysqliPDO

    获取最后插入的ID的示例

    场景1 :( Mysqli)

    $sql = "INSERT INTO MyGuests (firstname, lastname, email)
    VALUES ('John', 'Doe', 'john@example.com')";
    if (mysqli_query($conn, $sql)) {
        $last_id = mysqli_insert_id($conn);
        echo "New record created successfully. Last inserted ID is: " . $last_id;
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }
    mysqli_close($conn);
    

    此处您在执行查询后运行了查询。

    场景2:(PDO)

    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "myDBPDO";
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "INSERT INTO MyGuests (firstname, lastname, email)
        VALUES ('John', 'Doe', 'john@example.com')";
        // use exec() because no results are returned
        $conn->exec($sql);
        $last_id = $conn->lastInsertId();
        echo "New record created successfully. Last inserted ID is: " . $last_id;
        }
    catch(PDOException $e)
        {
        echo $sql . "<br>" . $e->getMessage();
        }
    $conn = null;
    ?> 
    

答案 2 :(得分:0)

我通过分配适当的权限解决了这个问题。 正如this questions所说

确保所有文件归Apache组和用户所有。在Ubuntu中,它是www-data组和用户

chown -R www-data:www-data /path/to/webserver/www

接下来,www-data组的所有成员都可以读取和写入文件

chmod -R g+rw /path/to/webserver/www

我在我的网页文件夹之外的图像文件夹中提供了读写权限(由于良好的安全措施)。