php - 数据库未连接

标签 php mysqli

我无法连接到我的数据库。这是我的代码,请您帮帮我。

<?php

error_reporting(E_ALL); 
ini_set('display_errors', 1);

define('DB_HOST', 'mysql.hostinger.in');
define('DB_NAME', 'u25*****41_hari');
define('DB_USERNAME', 'u25*****41_hari');
define('DB_PASSWORD', 'hariharan');

$link = mysqli_connect(DB_HOST, DB_USERNAME,    DB_PASSWORD);

if (!$link) {
     die('Could not connect line 9');
}

$DB_SELECT = mysqli_select_db(DB_NAME, $link);

if (!$DB_SELECT) {
        die('Could not connect line 15');
}

$valueone = $_POST['Name'];
$valuetwo = $_POST['Username'];
$valuethree = $_POST['Password'];
$valuefour = $_POST['Mobile_Number'];

$sqlone = "INSERT INTO Account (Name) VALUES ('$valueone')";
$sqltwo = "INSERT INTO Account (Username) VALUES ('$valuetwo')";
$sqlthree = "INSERT INTO Account (Password) VALUES ('$valuethree')";
$sqlfour = "INSERT INTO Account (Mobile_Number) VALUES ('$valuefour')";

if (!mysql_query($sqlone) || !mysql_query($sqltwo) || !mysql_query($sqlthree) || !mysql_query($sqlfour) || !mysql_query($sqlfive)) {
     die('Could not connect name line 33');
}


mysql_close();
?>

这是我得到的错误:

Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in /home/u256114841/public_html/login.php on line 17 Could not connect line 15

最佳答案

前言:确保所有表单元素 name属性匹配 POST数组,并且您的数据库对数据输入及其长度使用正确的类型。

在 mysqli 中,连接是第一位的。

你有

$DB_SELECT = mysqli_select_db(DB_NAME, $link);

这应该读作
$DB_SELECT = mysqli_select_db($link, DB_NAME);

阅读手册:
  • http://php.net/manual/en/mysqli.select-db.php

  • 但是...您最好一次性使用所有 4 个参数:
    $link = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
    

    同时摆脱$DB_SELECT = mysqli_select_db($link, DB_NAME);
  • 引用:http://php.net/manual/en/function.mysqli-connect.php

  • 但是,您将 MySQL API 与 mysql_ 混合使用。职能。

    那些不同的 API 不要混杂。

    请参阅 Stack 上的以下内容:
  • Can I mix MySQL APIs in PHP?

  • 您也没有发布您的 HTML 表单以与您的 POST 数组一起使用。

    确保您的表单确实使用 POST 方法并且您的输入都具有相同的名称属性。

    注意: $_POST['Name']name="name"将失败,如果这是您的表单元素的名称并且对于所有其他输入都相同。 这些是区分大小写的。

    添加 error reporting到文件的顶部,这将有助于查找错误。
    <?php 
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
    // rest of your code
    

    旁注:显示错误应该只在暂存中完成,而不是在生产中。

    此外,您的代码容易受到 SQL 注入(inject)的影响。使用准备好的语句。
  • https://en.wikipedia.org/wiki/Prepared_statement

  • 您不需要像这样使用单独的查询。

    只需一次性添加所有列和值。
    $sqlone = "INSERT INTO Account (Name, Username, Password, Mobile_Number) 
                VALUES ('$valueone', '$valuetwo', '$valuethree', '$valuefour')";
    

    使用 mysqli_real_escape_string()为你所有的值(value)观。

    IE。:
    $valueone = mysqli_real_escape_string($link, $_POST['Name']);
    

    并为其他人做同样的事情。

    我还注意到您可能以纯文本形式存储密码。不建议这样做。

    使用以下方法之一:
  • CRYPT_BLOWFISH
  • crypt()
  • bcrypt()
  • scrypt()
  • On OPENWALL
  • PBKDF2
  • PBKDF2 on PHP.net
  • PHP 5.5 的 password_hash() 功能。
  • 兼容包(如果 PHP < 5.5)https://github.com/ircmaxell/password_compat/

  • 其他链接:
  • PBKDF2 For PHP


  • 附加引用:
  • http://php.net/manual/en/mysqli.error.php
  • http://php.net/manual/en/mysqli.real-escape-string.php
  • https://en.wikipedia.org/wiki/SQL_injection
  • How can I prevent SQL injection in PHP?
  • 关于php - 数据库未连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33399607/

    相关文章:

    php - 根据窗口大小发送正确大小的图像

    php - MySQL 服务器在 PHP 中消失了

    php - 可以在不实例化新对象的情况下重新打开 MYSQLI 连接吗

    php - new mysqli()使用函数时重置为null

    php - 无法找到PHP为MySQL错误号定义

    php - 添加评论时显示用户名 My SQL无法记录用户名,只显示当前登录用户

    php - 如何将列转置为行?

    php - 反序列化有时会返回 false

    PHP在MYSQL中实现单个字段

    php - 在 MySQL 中搜索具有多个标签或 'Select all exept' 的 Tagtable