Соединение установлено с сервером MariaDB, но вы не можете получить данные в базу данных? - PullRequest
0 голосов
/ 23 июня 2018

Это весь код 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 голосов
/ 23 июня 2018

В вашей функции:

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.

В качестве примечания: этот процесс, который вы выполняете, выглядит немного нестабильным, и следует очень внимательно относиться к именам функций белого списка и их настройке. Вы также можете переместить все это в класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...