0

我需要开始使用 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 答案指向某人自动更新这些东西的东西,但此时我的代码太少了,看起来有点矫枉过正。

4

2 回答 2

3

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

于 2012-11-29T20:16:26.960 回答
0

我最近刚切换到 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 的工作原理。希望这可以帮助。

于 2012-11-29T20:30:36.303 回答