Insert_id не работает в сети, загруженной на сервер

Я нанял 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?
Спасибо!

-1

Решение

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 на соответствующую папку

0

Другие решения

Для того, чтобы получить Last inserted ID В соответствии с заданным вами Вопросом обязательно, чтобы вы выполнили

  1. Выполненное заявление
  2. Запрошенное заявление

после вставки, чтобы получить последний вставленный идентификатор в mysqli.* или в PDO Топ.

В вашем коде вы должны изменить способ получения последнего вставленного идентификатора, поскольку вы не выполняли запрос после выполнения.

Заменить:

$ID = $mysqli->insert_id;

С:

$ID = $stmt->insert_id;

Замечания: Поскольку вы выполнили запрос, используя $stmt один, а не с $mysqli Вы должны изменить это, как я уже говорил.

Ниже приведен пример того, как получить последний вставленный идентификатор на основе Mysqli а также PDO

Сценарий 1: (Mysqli)

$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', '[email protected]')";
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', '[email protected]')";
// 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;
?>
0

Я решил это, назначив соответствующие разрешения.
Как это вопросы говорит

Убедитесь, что все файлы принадлежат группе Apache и пользователю. В Ubuntu это группа www-данных и пользователь

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

Далее позволили всем членам группы www-data читать и записывать файлы

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

Я дал разрешения на чтение и запись своей папке «Изображения» вне папки моей веб-страницы (из-за надлежащей практики безопасности).

0
По вопросам рекламы [email protected]