Insert_id 无法处理上传到服务器的网络
Insert_id not working on web uploaded in 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 的任何想法?
谢谢!
1.Check 如果行插入到数据库中。如果它没有插入,那么你做错了什么。比如错误的查询(例如字段名或...)或连接问题。如果您没有数据库问题,请转到#2。
2.check 如果您尝试上传的文件夹具有适当的权限:
ls -l
如果没有适当的权限。读这个:
https://help.ubuntu.com/community/FilePermissions
3.If 数据库和权限都没有问题,说明你插错文件夹了。用 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
为了根据您提出的问题检索 Last inserted ID
,您必须 运行
- 执行语句
- 查询语句
插入后,以便在 mysqli.*
或 PDO
顶部获取最后插入的 ID。
In your code you have to change of how to get the last inserted ID since you have not run the query after Execution.
替换:
$ID = $mysqli->insert_id;
搭配:
$ID = $stmt->insert_id;
Note: Since you have executed the query using $stmt
alone and not with the $mysqli
you need to change it to as i have mentioned.
下面是如何根据Mysqli
和PDO
获取最后插入的ID的例子
场景一:(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;
?>
我已经通过分配适当的权限解决了这个问题。
正如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
我在我的网页文件夹之外授予了对我的图片文件夹的读写权限(出于良好的安全实践)。
我雇用了 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.Check 如果行插入到数据库中。如果它没有插入,那么你做错了什么。比如错误的查询(例如字段名或...)或连接问题。如果您没有数据库问题,请转到#2。
2.check 如果您尝试上传的文件夹具有适当的权限:
ls -l
如果没有适当的权限。读这个: https://help.ubuntu.com/community/FilePermissions
3.If 数据库和权限都没有问题,说明你插错文件夹了。用 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
为了根据您提出的问题检索 Last inserted ID
,您必须 运行
- 执行语句
- 查询语句
插入后,以便在 mysqli.*
或 PDO
顶部获取最后插入的 ID。
In your code you have to change of how to get the last inserted ID since you have not run the query after Execution.
替换:
$ID = $mysqli->insert_id;
搭配:
$ID = $stmt->insert_id;
Note: Since you have executed the query using
$stmt
alone and not with the$mysqli
you need to change it to as i have mentioned.
下面是如何根据Mysqli
和PDO
场景一:(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;
?>
我已经通过分配适当的权限解决了这个问题。 正如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
我在我的网页文件夹之外授予了对我的图片文件夹的读写权限(出于良好的安全实践)。