首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何用bind_result和fetch修复get_result和fetch_assoc (不用获取空值)?

在PHP中,我们可以使用bind_result和fetch方法来修复get_result和fetch_assoc方法的问题,同时避免获取空值。

首先,我们需要明确get_result和fetch_assoc方法的问题。get_result方法是在执行一条查询语句后,将结果集以mysqli_result对象的形式返回,然后我们可以使用fetch_assoc方法从结果集中获取一行作为关联数组。然而,这种方法在处理空值时会出现问题,因为fetch_assoc方法会将空值解释为false,导致无法准确判断是否获取到了空值。

为了解决这个问题,我们可以使用bind_result方法和fetch方法来替代get_result和fetch_assoc方法。bind_result方法用于将查询结果的列与变量进行绑定,fetch方法用于获取一行结果并将其存储在绑定的变量中。

下面是修复get_result和fetch_assoc方法的示例代码:

代码语言:php
复制
// 执行查询语句
$stmt = $mysqli->prepare("SELECT column1, column2 FROM table WHERE condition = ?");
$stmt->bind_param("s", $condition);
$stmt->execute();

// 绑定结果的列与变量
$stmt->bind_result($column1, $column2);

// 获取结果并处理
while ($stmt->fetch()) {
    // 在这里处理获取到的结果
    // $column1 和 $column2 分别存储了查询结果的列值
    // 注意,这里不会获取到空值
}

// 关闭查询
$stmt->close();

在上面的示例代码中,我们首先使用prepare方法准备查询语句,并使用bind_param方法绑定查询条件。然后,我们使用bind_result方法将查询结果的列与变量进行绑定,这样在后续的fetch操作中,获取到的结果会自动存储在绑定的变量中。在fetch循环中,我们可以处理获取到的结果,而且不会获取到空值。

需要注意的是,bind_result方法需要在执行查询语句后立即调用,而且需要在fetch操作之前进行绑定。另外,为了安全起见,我们还应该在使用完结果集后关闭查询。

推荐的腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

PHP中的MySQLi扩展学习(五)MySQLI_STMT对象操作

其实操作方式之类也都比较相似,不外乎以绑定参数为主的一些针对 SQL 语句获取结果集的操作。...同 PDO 一样,这个方法只返回成功失败的信息,也就是一个布尔。...返回结果集 执行 fetch() 方法返回的是一个布尔,它主要的作用是将结果集绑定到指定的变量中,所以如果你直接打印它的结果是不会有什么有用的信息的,我们必须通过绑定列变量的方式来获得数据。...(); while($row = $result->fetch_assoc()){ var_dump($row); } // array(4) { // ["id"]=> //...然后通过该对象的 fetch_assoc() 就获得了键名形式的结果集数组。 关于 MySQLI_result 对象的内容,我们将在下篇文章中再进行详细的学习了解。

2.5K00

PHP中的MySQLi扩展学习(五)MySQLI_STMT对象操作

其实操作方式之类也都比较相似,不外乎以绑定参数为主的一些针对 SQL 语句获取结果集的操作。...同 PDO 一样,这个方法只返回成功失败的信息,也就是一个布尔。...返回结果集 执行 fetch() 方法返回的是一个布尔,它主要的作用是将结果集绑定到指定的变量中,所以如果你直接打印它的结果是不会有什么有用的信息的,我们必须通过绑定列变量的方式来获得数据。...(); while($row = $result->fetch_assoc()){ var_dump($row); } // array(4) { // ["id"]=> //...然后通过该对象的 fetch_assoc() 就获得了键名形式的结果集数组。 关于 MySQLI_result 对象的内容,我们将在下篇文章中再进行详细的学习了解。

2.1K10
  • 【PHP】当mysql遇上PHP

    > 【注意点】 mysqli_fetch_assoc(面向过程)fetch_assoc(面向对象)这两个方法返回的是一个关联数组变量$row 在命令行界面里,我们需要做选择数据库的选择,即使用“USE...例如:mysqli_connect('localhost', 'root', 'phw441423', 'penghuwan');中我们选择了数据库penghuwan所以就不用写USE语句了 最后记得要释放结果集关闭连接...应放在fetch语句前) excute()执行完毕的时候,$name,$number仍为,直到fetch()第一次执行的时候,$name,$number才取到对应行的列 将上面例子中对应代码改成:...> 运行:报错消失 三.将字符串写入数据库前应做的检测处理 应该注意的是三个方面的事情: 检查输入是否为,这点就不加赘述了 去除首尾空格(假设我们在录入数据库前没有去除空格的话,例如将“【空格】彭湖湾...> 输入的时候: 输入带空格魔术字符串的文本——“【空格】penghuwan” 参考资料 《phpmysql的web开发》--(澳)威利,(澳)汤姆森 著 PHP官方文档 链接:http:

    5.7K90

    SQL注入攻击与防御举例

    SQL注入攻击与防御实例 1.1 以下是一段普普通通的登录演示代码,该脚本需要usernamepassword两个参数,该脚本中sql语句没有任何过滤,注入起来非常容易,后续部分将逐步加强代码的防注入功能...或者 username='or''=' limit 1# password=任意非 SQL语句可以自己写一下。 除了上述的payload,还有很多其他的payload可用。...上述代码在进行查询时同时查询了usernamepassword,查询时用户能操作的参数越多,不确定性就越大。...= $db->query($sql); } if (isset($fetch) && $fetch->num_rows>0){ $row = $fetch->fetch_assoc...预编译能防止SQL注入是因为SQL语句在执行前经过编译后,数据库将以参数化的形式进行查询,当运行时动态地把参数传给预处理语句时,即使参数里有敏感字符 'or''='数据库也会将其作为一个字段的属性来处理而不会作为一个

    99030

    PHP 应用PDO技术操作数据库

    ='1' align='center'>"; echo "用户ID姓名性别年龄"; while($row=$result->fetch_assoc...> 如果在SELECT查询语句上也使用占位符去查询,并需要多次执行这一条语句时,也可以将mysqli_stmt对象中的bind_param()bind_result()方法结合起来. PDO 获取表中数据: 当执行查询语句时我们可以使用PDO中的Query()方法,该方法执行后返回受影响的行总数,也可以使用Fetch等语句,下面是三者的查询方式. <?...::FETCH_ASSOC)) { echo $row['uid'] ....> PDO 绑定参数实现查询: 前面的查询是直接写死的SQL语句实现的查询,这里我们需要通过PDO将其参数绑定,动态的传入数据让其进行查询,该方法可以将一个列一个指定的变量名绑定在一起. <?

    3.4K10

    PHP中的PDO操作学习(四)查询结构集

    获取全部数据 从代码定义中可以看出,fetch() 方法是获取当前数据集的下一行数据,就像数据库的游标操作一样。...PDO::FETCH_ORI_NEXT 是获取游标的下一条数据,而 PDO::FETCH_ORI_LAST 是获取游标的最后一条数据。...所以我们如果在不重新 execute() 情况下再次调用 fetchAll() 的话,获取的就是的数据。因为游标已经到底了。...它就相当于是默认的在方法内部指定了 PDO::FETCH_COLUMN ,并且只需要一个参数就是列的下标。 需要注意的是,它的返回是下一行的指定列,也就是说,它在底层是调用的 fetch() 方法。...如果要获取结果集中所有指定列的内容,我们还需要通过 fetch() 的遍历方式一样的方法来遍历结果集。

    1.1K20

    由PHP SECURITY CALENDAR 2017引发的思考总结

    $whitelist = array(); $result = $conn->query($sql); if($result->num_rows > 0){ $row = $result->fetch_assoc...not in whitelist."); } $result = $conn->query($sql); if($result->num_rows > 0){ $row = $result->fetch_assoc...> 题目大概的思路就是通过.Svn源码泄露,获取index.phpconfig.php文件,config.php的关键信息被隐藏,需要审计源码来构造playload获取flag。...In_array()这里就不用说了,通过上面的例子应该很容易理解如何绕过,这里主要说下如何使用updatexml注入来获取flag。...举个几个简单的例子, Select make_set(1,'a','b','c'); 转换过程如下: 这里bits参数将转为二进制,1的二进制为0001,倒过来为1000,取比特位为1的字符,若该比特位为

    47610

    【译】现代化的PHP开发--PDO

    与mysql扩展相比,它带来了很多好处,面向对象的接口、prepare语句、多语句、事务支持、增强的调试功能嵌入式服务器支持。...PDO::FETCH_BOTH (default):返回按结果集中返回的列名0索引列号索引的数组。(PDO::FETCH_ASSOCPDO::FETCH_NUM的组合)。 还有很多参数选项。...以下有两者主要的问题,如果还是使用query fetch 的查询方法: 首先,我们必须确保传递给PDO::query的SQL语句是安全的。对于转义引用的输入必须得到很好的处理。...它不仅提高了运行多个类似查询的效率,而且还能处理好含有转义引用的用户输入。...4.1、Fetch 方法: 我们讨论过了一个(PDOStatement::fetch)用于检索结果集的获取方法。事实上,PDOStatement 提供了三种额外的获取方法。

    1.9K00
    领券