当前位置: 首页 > 面试题库 >

如何使用mysql_函数将脚本转换为使用mysqli_函数?

陶博涉
2023-03-14
问题内容

编辑: 是否使用mysqli_不在此问题的范围内。考虑使用PDO。

需要采取什么步骤将脚本从使用不赞成使用的mysql_功能转换为mysqli_

使用mysqli_代替时,是否需要采取其他不同的措施mysql

这是使用mysql_函数的基本脚本:

<?php

//define host, username and password

$con = mysql_connect($host,$username,$password);
if (!$con) {
    die('Could not connect: ' . mysql_error());
}

$db_name ="db1";
mysql_select_db($dbname, $con);

$value1 = mysql_real_escape_string($input_string);

$query = 'SELECT * FROM table1 WHERE table1.col1=' . $value1 . '';
$result = mysql_query($query, $con);

while($row = mysql_fetch_assoc*$result)
{
    $col1 = $row['col1'];
    $col2 = $row['col2'];

    echo $col1 . ' ' . $col2 . '<br />';
}

mysql_close($con);
?>

问题答案:

注意:

从转换mysql_mysqli_可能不是最佳的。如果您准备将所有代码转换为OOP,请考虑使用
PDO

这是很有诱惑力的尝试更换的所有实例mysql_mysqli_祈祷它的工作原理。您会很亲密,但不是很准。

连接到数据库:

幸运的是,该方法与您可以交换它们的功能名称mysqli_connect足够接近mysql_query

mysql_:

$con = mysql_connect($host, $username, $password);

mysqli_:

$con = mysqli_connect($host, $username, $password);

选择一个数据库

现在,利用mysqli_库中的大多数其他功能,您需要mysqli_select_db将数据库连接作为其 第一个
参数传递。大多数mysqli_功能首先需要连接对象。

对于此函数,您只需切换传递给该函数的参数的顺序即可。如果您之前未将其传递给连接对象,则 必须立即将其添加为第一个参数。

mysql_:

mysql_select_db($dbname, $con);

mysqli_:

mysqli_select_db($con, $dbname);

另外,您还可以将数据库名称作为第四个参数传递,从而mysqli_connect绕过了call的需要mysqli_select_db

$con = mysqli_connect($host, $username, $password, $dbname);

清理用户输入

使用mysqli_real_escape_string与十分相似mysql_real_escape_string。您只需要传递连接对象作为第一个参数。

mysql_:

$value1 = mysql_real_escape_string($input_string);

mysqli_:

$value1 = mysqli_real_escape_string($con, $input_string);

非常重要:准备和运行查询

mysql_不建议使用功能的原因之一是它们无法处理预准备的语句。如果您只是简单地将代码转换为,mysqli_而没有采取此重要步骤,则可能会遇到一些功能上的最大弱点mysql_

值得阅读有关准备好的语句及其好处的这些文章:

维基百科-预备陈述

PHP.net-MySQLi准备的语句

注意:使用准备好的语句时,最好显式列出要尝试查询的每一列,而不是使用*表示法查询所有列。这样,您可以确保已计入对的调用中的所有列mysqli_stmt_bind_result

mysql_:

$query = 'SELECT * FROM table1 WHERE table1.col1=' . $value1 . '';
$result = mysql_query($query, $con);
while($row = mysql_fetch_assoc*$result)
{
    $col1 = $row['col1'];
    $col2 = $row['col2'];

    echo $col1 . ' ' . $col2 . '<br />';
}

mysqli_:

$query = 'SELECT col1,col2 FROM table1 WHERE table1.col1=?';
if ($stmt = mysqli_prepare($link, $query)) {

    /* pass parameters to query */
    mysqli_stmt_bind_param($stmt, "s", $value1);

    /* run the query on the database */
    mysqli_stmt_execute($stmt);

    /* assign variable for each column to store results in */
    mysqli_stmt_bind_result($stmt, $col1, $col2);

    /* fetch values */
    while (mysqli_stmt_fetch($stmt)) {
        /*
            on each fetch, the values for each column 
            in the results are automatically stored in 
            the variables we assigned using 
            "mysqli_stmt_bind_result"
        */
        echo $col1 . ' ' . $col2 . '<br />';
    }

    /* close statement */
    mysqli_stmt_close($stmt);
}

显示错误

显示错误与的作用略有不同mysqli_mysqli_error需要连接对象作为其第一个参数。但是,如果连接失败怎么办?mysqli_引入了一些不需要连接对象的mysqli_connect_*函数:函数。

mysql_:

if (!$con) {
    die('Could not connect: ' . mysql_error());
}

if (!$result) {
    die('SQL Error: ' . mysql_error());
}

mysqli_:

/* check connection error*/
if (mysqli_connect_errno()) {
    die( 'Could not connect: ' . mysqli_connect_error() );
}

/* check query error */
if ($stmt = mysqli_prepare($link, $query)) {

    // ... execute query

    if (mysqli_stmt_error($stmt)) {
        echo 'SQL Error: ' . mysqli_stmt_error($stmt);
    }
}


 类似资料:
  • 问题内容: 我在整个项目中都用过;但是我刚刚了解到,PHP 5.5起已弃用该功能,而PHP 7中已将其删除。 因此,我想知道是否可以盲目替换项目中的所有功能吗?例如,仅替换为。有副作用吗? 问题答案: 简短的回答是 no ,功能不相等。 好消息是,有一个转换工具可以在您需要更改许多调用/项目时为您提供帮助。这将使您的脚本立即可用。 https://github.com/philip/MySQLCo

  • 本文向大家介绍如何使用COALESCE()函数将MySQL null转换为0?,包括了如何使用COALESCE()函数将MySQL null转换为0?的使用技巧和注意事项,需要的朋友参考一下 您可以使用该函数将MySQL null转换为0 让我们首先创建一个表。创建表的查询如下 使用insert命令在表中插入一些记录。 查询如下 使用select语句显示表中的所有记录。 查询如下 以下是输出 这是

  • 问题内容: 问题: 我需要 使用ODBC转义序列 仅获取DATE(=日期,无时间)。 然而 确实将列作为datetime值(date WITH time)返回。 是否有任何 ODBC功能 我可以用得到的 日期 值 只 ? 注意: 这不是重复的问题。 我知道可以使用 非 -ODBC转换功能,例如 但出于兼容性原因,我确实需要 ODBC 函数。 问题答案: 您可以使用此: 在我可以测试的环境中运行(S

  • 我正在使用一个带有python函数的env将docx转换为pdf文件。我在用邮递员寄base64。然后我挂载docx文件(一切都正常),但是当它将docx文件转换为pdf时,会出现一个错误。我想那是因为我的环境里没有办公室?没有办公室我怎么能修好它?谢谢 系统。私人。CoreLib:执行函数时的异常:函数。FunConzer.系统。私人。CoreLib:结果:失败异常:属性错误:模块'comtyp

  • 我们都知道以错误的方式使用函数可能会非常危险,它会使您的网站易受攻击,等等。但是正确使用这些函数可以防止SQL注入,并且实际上比更新的PDO函数更快一些。 考虑到所有这些,为什么函数不推荐使用呢?

  • 本文向大家介绍使用Java脚本将图像转换为Base64数据URL,包括了使用Java脚本将图像转换为Base64数据URL的使用技巧和注意事项,需要的朋友参考一下 若要使用javascript将图像从HTML页面标签转换为数据URI,首先需要创建一个canvas元素,将其宽度和高度设置为与图像相同,在其上绘制图像,最后在其上调用toDataURL方法。 这将返回图像的base64编码数据URI。例