这是整个php代码:

<html>
<head>
   <title>Connect to MariaDB Server</title>
</head>

<body>
  <?php
     $dbhost = 'localhost';
     $dbuser = 'test';
     $dbpass = 'pass';
     $dbname = 'databseName';
     $conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

     if(! $conn ) {
        die("Connection failed: " . mysqli_connect_error());
     }

     echo "Connected successfully<br><br>";

     function add($url, $category){
         $sql = "INSERT INTO tt (url, category) VALUES ('$url', '$category');";
         if(mysqli_query($conn, $sql)){
             echo "Recorded.";
         } else {
             echo "Error: " . $sql . "<br>" . mysqli_error($conn);
             }
      }

      if(function_exists($_GET['f'])){
         $_GET['f']($_GET['url'], $_GET['cat']);
      }

      mysqli_close($conn);
   ?>
</body>
</html>


当我在浏览器中输入“ http://localhost/connect.php?f=add&url=www.google.com&cat=google”时,结果如下:

Connected successfully

Error: INSERT INTO tt (url, category) VALUES ('www.google.com', 'google');
Notice: Undefined variable: conn in /var/www/html/connect.php on line 24

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /var/www/html/connect.php on line 24

Fatal error: Uncaught Error: Call to undefined function mysqli_errot() in /var/www/html/connect.php:27 Stack trace: #0 /var/www/html/connect.php(32): add('www.google.com', 'google') #1 {main} thrown in /var/www/html/connect.php on line 27


我尝试了许多其他在网上找到的可能解决方案,但都无法解决。请帮助,在此先多谢!

最佳答案

根据您的职能:

function add($url, $category) {
    // code
}


您正在尝试使用变量$conn。在函数外部定义。

您应该将该变量传递给函数:

function add($url, $category, &$conn) {
    // code
}

if(function_exists($_GET['f'])){
    $_GET['f']($_GET['url'], $_GET['cat'], $conn);
}


您可以仅在函数内部使用global $conn;,但建议避免完全使用global。它使大型项目中的代码混乱而危险。控制较少。通过引用传递$ conn,您将特别确保将使用正确的值。

附带说明:由于您要传入传递的值,这些值中可能包含恶意SQL,因此准备好的语句可用于SQL。

附带说明:您正在执行的整个过程看起来有些不稳定,应该格外小心地将函数名称列入白名单并进行设置。您可能也希望将其全部移到一堂课。

09-30 17:10
查看更多