首页 > 解决方案 > PHP 在一个用户上插入数据库,但不在另一个具有相同权限的用户上

问题描述

当我的注册表单尝试插入 user1(已被授予所有特权)时,它可以工作。但是当我尝试使用 user2 插入时(它也被授予所有特权)它不会插入。我没有收到任何错误,并且已经进行了几个小时的故障排除,但找不到问题,更好的是解决方案。

User2 没有所有特权(就像任何理智的人当然应该做的那样)。当我尝试授予它所有权限时,它仍然无法插入,而具有相同权限的 user1 可以。

由于我不知道问题出在哪里,我只能包含似乎正确的数据库连接代码。如果需要其他任何东西,我很乐意把它放在这里。

$dbservername = "localhost";
$dbusername = "user1";
$dbpassword = "password1";
//$dbpassword = "password2"; (I keep this here to change users fast when troubleshooting and yes I change the username everytime)
$dbname = "database1";

$db = new mysqli($dbservername, $dbusername, $dbpassword, $dbname);

我希望 user2 插入数据库,但它不会。我没有任何错误消息。

特权:

在此处输入图像描述

编辑:

我试过运行马丁给出的代码,两个用户都连接了......

标签: phpmysqlmariadb

解决方案


请使用以下代码给自己错误反馈:

$dbServerName = "localhost";
$dbUsername = "user1";
$dbPassword = "password1";
$dbName = "database1";

    $mysqliDriver = new \mysqli_driver();
    $mysqliDriver->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT;

    try {
        $db = new \mysqli($dbServerName, $dbUsername, $dbPassword, $dbName);
    }
    catch(\mysqli_sql_exception | \Exception $em) { // format requires PHP 7.2
        error_log(print_r($em,true)); // READ THIS!!! 
        die("failed. Check the error log!");
    }
    die("We are connected!");

这设置了 MySQLi 驱动程序报告模式,它可以提供 i) 异常报告和 ii) 更多信息/更容易访问失败原因。

请让我们知道(更新/编辑您的问题)与 User2 连接时错误报告捕获的内容。

注意:如果您没有运行 PHP7.2,请将该行替换为:

catch(\Exception $em)

笔记:

您的 pastebin 代码;您将 $db 创建为 PHP对象,但将其与静态命令(mysqli_query($db, $sql)等)一起使用,就好像它不是对象(过程)一样。这是不一致的,会给你带来问题。

请在此处阅读如何正确构建 PHP / SQL 接口


推荐阅读