【问题标题】:mysql vs mysqli config file and queriesmysql vs mysqli 配置文件和查询
【发布时间】:2012-11-17 23:49:36
【问题描述】:

我需要开始使用 mysqli 扩展,但我发现各种相互冲突的信息取决于我尝试使用的所有信息的方式。

例如,我的头文件连接到一个“config.php”文件,目前看起来像这样:

<?php
$hostname_em = "localhost";
$database_em = "test";
$username_em = "user";
$password_em = "pass";
$em = mysql_pconnect($hostname_em, $username_em, $password_em) or trigger_error(mysql_error(),E_USER_ERROR); 
?>

但是当我访问 php.net 时,我发现我应该使用它,但是在更新了所有内容之后,我没有得到任何数据库。

<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli("127.0.0.1", "user", "password", "database", 3306);
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";
?>

我也经历过并在我的网站的以下代码中添加了一个“i”,但还是没有运气:

mysql_select_db($database_em, $em);
$query_getReview =
"SELECT 
reviews.title,
reviews.cover_art,
reviews.blog_entry,
reviews.rating,
reviews.published,
reviews.updated,
artists.artists_name,
contributors.contributors_name,
contributors.contributors_photo,
contributors.contributors_popup,
categories_name
FROM
reviews
JOIN artists ON artists.id = reviews.artistid
JOIN contributors ON contributors.id = reviews.contributorid
JOIN categories ON categories.id = reviews.categoryid
ORDER BY reviews.updated DESC LIMIT 3";
$getReview = mysql_query($query_getReview, $em) or die(mysql_error());
$row_getReview = mysql_fetch_assoc($getReview);
$totalRows_getReview = mysql_num_rows($getReview);

到目前为止,这是我的显示页面上唯一提到 mysql 的地方:

<?php } while ($row_getReview = mysql_fetch_assoc($getReview)); ?>

我确实在 oracle 看到了一些东西,另一个 stackoverflow 答案指出有人自动更新这些东西,但我现在的代码太少了,看起来有点矫枉过正。

【问题讨论】:

  • “它不起作用”是什么意思?您是否收到 WSOD 或连接失败、查询失败或“未找到函数”的输出?
  • 可能和here讨论过同样的问题

标签: php mysql mysqli database-connection


【解决方案1】:

向任何 mysql 函数添加 i 不会使其成为有效的 mysqli 函数。即使存在这样的功能,也可能参数不同。看看这里http://php.net/manual/en/book.mysqli.php 并花一些时间检查 mysqli 函数。也许尝试一些例子来熟悉事情的工作方式。我还建议您选择面向对象的代码或程序代码。不要混合它们。

【讨论】:

    【解决方案2】:

    我最近刚切换到 mysqli,花了我几个小时来解决它。对我来说效果很好,希望对你有所帮助。

    这里是连接BD的函数:

    function sql_conn(){
        $sql_host = "localhost";
        $sql_user = "test";
        $sql_pass = "pass";
        $sql_name = "test";
        $sql_conn = new mysqli($sql_host, $sql_user, $sql_pass, $sql_name);
        if ($sql_conn->connect_errno) error_log ("Failed to connect to MySQL: (" . $sql_conn->connect_errno . ") " . $sql_conn->connect_error);
        return $sql_conn;
    }
    

    这将返回一个 Mysqli 对象,您可以使用该对象在之后发出请求。您可以将它放在您的 config.php 中并包含它或将其添加到您的文件顶部,只要最适合您。

    一旦你有了这个对象,你就可以用它来查询这个对象,如下所示:(在这种情况下,如果出现错误,它将在 error_log 中输出。我喜欢在那里,你可以回显取而代之。

        //Use the above function to create the mysqli object.
        var $mysqli = sql_conn();
    
        //Create the query string (truncated for the example)
        var $query = "SELECT reviews.titl ... ... ted DESC LIMIT 3";
    
        //Launch the query on the mysqli object using the query() method
        if(!($results = $mysqli->query($query))){
            //It it fails, log the error
    
            error_log(mysqli_error($mysqli));
        }else{
            //Manipulate your data.
            //here it depends on what you retunr, a single value, row or a list of rows.
            //Example for a set of rows
    
            while ($record = $results->fetch_object()){ 
              array_push($array, $record); 
            }
        }
       //Just to show, this will output the array:
       print_r($array);
    
      //Close the connection:
      $mysqli->close();
    

    所以基本上,在 mysqli 中,您创建一个对象并使用该方法来解决问题。 希望这可以帮助。一旦你弄清楚了,你很可能会比 mysql 更喜欢 mysqli。反正我做到了。

    PS:请注意,这是从现有的工作代码中复制/粘贴的。可能有一些拼写错误,并且可能忘记在某处更改 var,但这是为了让您了解 mysqli 的工作原理。希望这会有所帮助。

    【讨论】:

    • 我建议你也检查一下准备好的语句,它有点复杂,但是,一旦你有了这个想法,我发现它更有效(又名程序员和服务器友好)
    • 什么都没有发生——完全空白的页面。我将此添加到标题顶部并删除了 config.php 链接-也许这就是问题所在? connect_errno) error_log ("连接 MySQL 失败: (" . $sql_conn->connect_errno . ") " . $sql_conn->connect_error);返回 $sql_conn; } var $mysqli = sql_conn();
    • 呃,无法在我的评论中添加中断。
    • 不,nada,谢谢。我确信您的代码对您来说非常有用,但太多的歧义使其无法与我所拥有的一起工作。
    • 保罗,你可以写信给我,我会尽力帮助你的。 (单击我的姓名/个人资料以查看我的电子邮件)。
    猜你喜欢
    • 2012-09-10
    • 2012-07-19
    • 1970-01-01
    • 2014-02-09
    • 2010-10-20
    • 2018-05-04
    • 1970-01-01
    • 2013-10-29
    • 2011-01-23
    相关资源
    最近更新 更多