已建立与MariaDB服务器的连接,但是无法将数据获取到数据库中?

时间:2018-06-23 12:55:50

标签: php mysql mariadb

这是整个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

我尝试了很多其他在网上找到的可能解决方案,但是没有一个起作用。请帮忙,在此先感谢!

1 个答案:

答案 0 :(得分:1)

根据您的职能:

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。

作为一个侧面说明:您正在执行的整个过程看起来有些不稳定,应该非常小心地将函数名称列入白名单并进行设置。您可能也希望将其全部转移到一个班级。