将 mysql 更改为 mysqli 及其 xampp 版本

Posted

技术标签:

【中文标题】将 mysql 更改为 mysqli 及其 xampp 版本【英文标题】:Changes mysql to mysqli and its xampp version 【发布时间】:2017-06-20 12:47:13 【问题描述】:

如果我将代码从 mysql 更改为 mysqli,我是否也要更改 xampp 版本?我的 xampp 版本是 2.5.8。

因为我更改它们后,发生了许多错误,并且所有错误都指向'mysqli',例如:

  mysqli_prepare()
  mysqli_stmt_bind_param()
  mysqli_stmt_execute()
  mysqli_num_rows()

连接.php

<?php

session_start();
// *Peringatan jangan ubah fail ni..        
$dbhost = "localhost"; //server untuk test
$dbuser = "root"; //user MYSQL
$dbpass = ""; //password MYSQL
$db = "sukandb"; //nama database
//tapi bila masuk ke dalam server kena tukar ikut keadaan server

$conn = new mysqli ($dbhost, $dbuser, $dbpass, $db);

if($conn->connect_error)
  die("Connection failed : " . $conn->connect_error);
  
?>

所有错误都在这个文件中: index.php

<?php
ob_start();
include("connection.php");
if($_SESSION['LoggedIn']): 
echo "Hello " .$_SESSION['nama'];
endif; 

$query = mysqli_prepare("SELECT * FROM daftar_pengguna WHERE noic = ? AND 
katalaluan = ?");
mysqli_stmt_bind_param($query, $_POST["noic"],md5($_POST["katalaluan"]));
mysqli_stmt_execute($query);

if(mysqli_num_rows($query) == 1)

$result = mysqli_fetch_assoc($query);
$_SESSION['userdetail']=$query;
$_SESSION['LoggedIn'] = true;
$_SESSION['nama'] = $result["nama"];
header("location:carianstatuspemohonresult.php");
exit;
 
 else
  
    echo "Salah nombor IC dan kata laluan";


?>

【问题讨论】:

能否发布您的错误信息。 当然。警告:mysqli_num_rows() 期望参数 1 为 mysqli_result 警告:mysqli_stmt_execute() 期望参数 1 为 mysqli_stmt,在警告中给出 null:mysqli_num_rows() 期望参数 1 为 mysqli_result,在中给出 null 这不是你如何使用prepared statement以及如何获取行数。 @LoganWayne 是哪一个? 【参考方案1】:

您的mysqli_query() 将在第一个参数上查找您的数据库连接:

$query = mysqli_prepare($conn, "SELECT userdetail, nama FROM daftar_pengguna WHERE noic = ? AND katalaluan = ?");

将绑定部分改为

mysqli_stmt_bind_param($query, "ss", $_POST["noic"], md5($_POST["katalaluan"]));

然后得到结果:

mysqli_stmt_bind_result($query, $userdetail, $nama);
mysqli_stmt_fetch($query);

另请参阅 here 以了解有关 mysqli_* 准备好的语句的更多信息。

还可以使用password_hash() 更安全地存储密码。

【讨论】:

这个答案只对 OP 有用,但对其他人没有用。鉴于 OP 会接受这一点,它弊大于利。只是一个想法。 @YourCommonSense 所以我应该使用 Logan Wayne 解决方案吗? @iladila 我的回答会解决你目前的情况,但是YourCommonSense说的范围更广【参考方案2】:

不,您不必更改 xampp。只要您使用 PHP 5,mysqli 就可以正常工作。 首先你需要了解 xampp,实际上 xampp 只不过是 PHPMySQLApache 的捆绑包(但有更多选项和服务器)。 您需要检查XAMPP 提供的 PHP 版本。要检查您的 PHP 版本,请转到您的 XAMPP 控制面板并运行 shell,然后键入以下命令

php -v

如果您的 PHP 版本类似于 5.*,那么您将从 MySQL 转到 MySQLi

mysqli 扩展旨在与 MySQL 4.1.13 或更高版本、5.0.7 或更高版本一起使用。 mysqli 扩展是在 PHP 5.0.0 版本中引入的。 MySQL 本机驱动程序包含在 PHP 版本 5.3.0 中。 检查您的版本并决定是否更改。

更新:在您的声明中提供您的$conn(准备方法)。

【讨论】:

我已经检查了php版本。它是 PHP 5.3.1。但错误让我感到困惑 对不起,我迟到了。我正在使用 PHPMYADMIN。它的版本是 3.2.4。这也是我的问题之一吗? 你为什么不安装新的 xampp ???看看你是否得到错误。 errmmm mysql服务器版本:5.1.41,MySQL客户端版本:5.1.41 伙计们,你们为什么还在讨论版本等问题?如果你们中的任何人看过代码,你会在 1 分钟内看到他的语句中有语法错误。

以上是关于将 mysql 更改为 mysqli 及其 xampp 版本的主要内容,如果未能解决你的问题,请参考以下文章

PHP 更改为 mysqli。 mysqli_connection 不是全局的吗?

mysql将默认字符集latin1更改为utf8

如何将此代码从mysqli更改为PDO

从 mysql 更新到 mysqli 后数据库查询中断

从 mysql 过渡到 MySQLi 或 PDO

mysqli_real_connect(): (HY000/2006): MySQL 服务器已经消失