【发布时间】:2021-04-15 08:14:57
【问题描述】:
我已经成功地通过客户端的 ajax 和在 Linux 虚拟机上使用 chromium 的本地主机从 php 脚本执行了服务器端数据库读取 (SELECT) 请求。数据按预期返回,这里没有问题。
按照相同的过程,我尝试发出 CREATE 和 UPDATE 请求,但没有任何反应。从我所看到的字面上看,什么都没有。 apache 日志中没有错误。数据库保持不变。如果我在 AJAX 调用后使用 .then(),则 Javascript 不会继续执行。
在下面的代码中,我把问题归结为一行代码:$result = $conn->query($query);单独一行,代码请求被认为是成功的,javascript 恢复 .then() 块。
这是我的 PHP 代码。
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$executionStartTime = microtime(true);
include("config.php");
header('Content-Type: application/json; charset=UTF-8');
$conn = new mysqli($cd_host, $cd_user, $cd_password, $cd_dbname, $cd_port, $cd_socket);
if (mysqli_connect_errno()) {
$output['status']['code'] = "300";
$output['status']['name'] = "failure";
$output['status']['description'] = "database unavailable";
$output['status']['returnedIn'] = (microtime(true) - $executionStartTime) / 1000 . " ms";
$output['data'] = [];
mysqli_close($conn);
echo json_encode($output);
exit;
}
$name = "test";
$query = "INSERT INTO location (name) VALUES (" . $name . ")";
$result = $conn->query($query);
if (!$result) {
$output['status']['code'] = "400";
$output['status']['name'] = "executed";
$output['status']['description'] = "query failed";
$output['data'] = [];
mysqli_close($conn);
echo json_encode($output);
exit;
}
$output['status']['code'] = "200";
$output['status']['name'] = "ok";
$output['status']['description'] = "success";
$output['status']['returnedIn'] = (microtime(true) - $executionStartTime) / 1000 . " ms";
$output['data'] = [];
mysqli_close($conn);
echo json_encode($output);
?>
我的 apache2 错误日志中的最后一个错误如下,现已修复。这是我收到或能找到的最后一条有用的信息:
[Sat Jan 09 19:08:53.816594 2021] [proxy_fcgi:error] [pid 6970] [client 127.0.0.1:39884] AH01071: Got error 'PHP message: PHP Notice: Undefined variable: result in /var/www/html/php/insertLocation.php on line 27', referer: http://127.0.0.1/
我在终端中使用了以下命令,以防它与权限相关。
将 www-data 添加到 osboxes 组
sudo usermod -a -G www-data osboxes
将 osboxes 添加到 www-data 组(这样做是为了更好地衡量)。
sudo usermod -a -G osboxes www-data
设置 osboxes(用户)拥有 www-data
sudo chown -R osboxes:www-data /var/www/html
sudo chgrp -R www-data /var/www/html
设置 apache 的访问权限
sudo chmod 777 -R /var/www/html
ls -al /var/www/html的终端输出
total 36
drwxrwsrwx 7 www-data www-data 4096 Dec 28 13:46 .
drwxr-xr-x 3 root root 4096 Dec 22 10:11 ..
drwxrwsrwx 4 osboxes www-data 4096 Dec 29 09:49 css
-rwxrwxrwx 1 osboxes www-data 5599 Jan 5 18:11 index.html
drwxrwsrwx 4 osboxes www-data 4096 Dec 28 13:46 js
drwxrwsrwx 3 osboxes www-data 4096 Dec 28 13:52 libs
drwxrwsrwx 2 osboxes www-data 4096 Jan 9 17:46 php
drwxrwsrwx 2 osboxes www-data 4096 Dec 21 12:05 sql
【问题讨论】:
-
您的查询中有语法错误。您需要将您的值用引号括起来:
VALUES ('" . $name . "')";。请注意,以这种方式构建查询容易受到 SQL 注入的影响。你应该转向准备好的陈述。见this question -
我不敢相信这一直是问题...解决方案对我来说甚至都不正确,因为它将变量转换为字符串?不管怎样,它有效,我觉得很愚蠢。非常感谢......请把它作为答案,我很乐意将其标记为这样。
-
如果我一开始就知道我在寻找什么,那将会有。在后站点中,建议的线程非常有用,我将来可能会使用它。但是,我可能花了很长时间才找到它。不同意这篇文章表明缺乏研究努力。有时您只需要伸出援助之手就可以开始提出正确的问题。
标签: php linux mysqli virtual-machine lamp