【问题标题】:Changed from MySQL to MySQLi, not working anymore从 MySQL 更改为 MySQLi,不再工作
【发布时间】:2016-05-26 13:06:54
【问题描述】:

在将 mysql 更改为 mysqli 时,我从一个完全正常工作的 php 文件变成了一个不存在的文件!我按照说明进行了每项更改,您能帮忙吗?这是我之前(mysql)和之后(mysqli)的代码:

之前(mysql):

<?php

function db_open() {
    $dtbhost=":/something/home/something2/mysql/run/mysql.sock";
    $dtbuser="root";
    $dtbpass="mypass";
    $dtbname="mydb";
    $connection   =   mysql_connect("$dtbhost",   "$dtbuser",   "$dtbpass") 
        or die('00: No Connection');
    @ mysql_select_db("$dtbname") or die('01: No Database');      
}

session_start(); // Starting Session
$error=''; // Variable To Store Error Message
if (isset($_POST['submit'])) {
    if (empty($_POST['username']) || empty($_POST['password'])) {
        echo ("<SCRIPT LANGUAGE='JavaScript'> 
            window.alert('You did not complete all of the required fields') 
            window.location.href='index.html' 
            </SCRIPT>");
    }
    else
    {
    // Define $username and $password
    $username=$_POST['username'];
    $password=$_POST['password'];
    // Establishing Connection with Server by passing server_name, user_id and password as a parameter
    db_open(); 
    // To protect MySQL injection for Security purpose
    $username = stripslashes($username);
    $password = stripslashes($password);
    $username = mysql_real_escape_string($username);
    $password = mysql_real_escape_string($password);
    $query = mysql_query("SELECT * FROM login_users WHERE username = '$username' AND password = '$password'") 
            or die(mysql_error());

    $rows = mysql_num_rows($query);
    if ($rows == 1) {
        $_SESSION['login_user']=$username; // Initializing Session
        header("location: profile.html"); // Redirecting To Other Page

    } else {
        echo ("<SCRIPT LANGUAGE='JavaScript'> 
            window.alert('Wrong username password combination. Please re-enter.') 
            window.location.href='index.html' 
            </SCRIPT>");
    }
    mysql_close($connection); // Closing Connection
    }
}
?>

之后(mysqli):

<?php

function db_open() {
    $dtbhost=":/something/home/something2/mysql/run/mysql.sock";
    $dtbuser="root";
    $dtbpass="mypass";
    $dtbname="mydb";
    $con = mysqli_connect("$dtbhost","$dtbuser","$dtbpass","$dtbname");

    // Check connection
    if (mysqli_connect_errno())
      {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }
}

session_start(); // Starting Session
$error=''; // Variable To Store Error Message
if (isset($_POST['submit'])) {
    if (empty($_POST['username']) || empty($_POST['password'])) {
        echo ("<SCRIPT LANGUAGE='JavaScript'> 
            window.alert('You did not complete all of the required fields') 
            window.location.href='index.html' 
            </SCRIPT>");
    }
    else
    {
    // Define $username and $password
    $username=$_POST['username'];
    $password=$_POST['password'];
    // Establishing Connection with Server by passing server_name, user_id and password as a parameter
    db_open(); 
    // To protect MySQL injection for Security purpose
    $username = stripslashes($username);
    $password = stripslashes($password);
    $username = mysqli_real_escape_string($con, $username);
    $password = mysqli_real_escape_string($con, $password);

    $query = mysqli_query($con, "SELECT * FROM login_users WHERE username = '$username' AND password = '$password'") 
            or die(mysqli_error());

    $rows = mysqli_num_rows($query);
    if ($rows == 1) {
        $_SESSION['login_user']=$username; // Initializing Session
        header("location: profile.html"); // Redirecting To Other Page

    } else {
        echo ("<SCRIPT LANGUAGE='JavaScript'> 
            window.alert('Wrong username password combination. Please re-enter.') 
            window.location.href='index.html' 
            </SCRIPT>");
    }
    mysqli_close($con); // Closing Connection
    }
}
?>

我得到的错误是:

警告:mysqli_connect(): php_network_getaddresses: getaddrinfo failed: hostname or servname provided, or not known in /something/home/something2/public_html/login.php on line 8

警告:mysqli_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo 失败:提供主机名或服务名,或在 /something/home/something2/public_html/login.php 在第 8 行未能 连接到 MySQL:php_network_getaddresses:getaddrinfo 失败: 提供主机名或服务名,或未知

(第 8 行是:$con = mysqli_connect("$dtbhost","$dtbuser","$dtbpass","$dtbname");

这会触发更多错误,因为 $con 为空。 任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 你知道什么是主机吗?
  • 对不起,RTFM,看看socket和host的区别
  • 是的,我刚刚注意到,但因为它适用于 mysql,我认为这没有错! Mysql 可以与套接字和主机一起工作吗?

标签: php mysql mysqli database-connection


【解决方案1】:

$dtbhost 变量应该是 IP 地址或域名。例如:'localhost'、'127.0.0.1'、'example.com'等。不是套接字文件。

【讨论】:

  • 好的,所以 mysqli 需要一个主机但 mysql 需要一个套接字?对吗?
  • mysql 驱动可以与主机或套接字连接(都可以) mysqli 驱动只能连接到主机,或者主机:端口
  • 非常感谢!你知道我是否可以从套接字链接中获取我的主机地址吗?
  • 看起来是同一台机器,所以应该是'localhost'或者'127.0.0.1'
最近更新 更多