PHP使用mysqli进行数据读取

首先要与数据库建立连接

$servername="servername";//数据库地址如localhost
$username="username";
$password="password";
$conn=new mysqli($servername,username,password);

执行SQL语句可以通过mysqli执行也可以通过mysqli的实例执行

$sql="sql语句";
mysqli_query($conn,$sql);
conn->query($sql);

读取查询结果的方法

//conn->query($sql)会返回一个 mysqli_result对象,该类有fetch_assoc方法
while ($row=$result->fetch_assoc())
        {
        echo ($row['name']);//这里的name是标的列名。
    }
//也可以使用fetch_row方法
while($row=$result->fetch_row(){//或者mysqli_fetch_row($result)
    echo ($row[0]);//0是索引
    /*
        想要输出一行中的所有数据时可以用foreach循环
        foreach($row as $data){
            echo $row;
        }
        上面也可以用相同方法
    */
    echo"<br>";
}

下面为上面两个方法做出解释,首先两者最大的区别在于返回值的不同,fetch_assoc方法以键值对数组形式返回一行数据,而fetch_row方法返回的是以枚举数值返回的一行数据。简单来说就是映射方式不同,一个是以列名来获取数据另一个是以索引来获取数据。

重要事项

这两个方法在每次运行的时候都会将指针向下移动一位!!!
$result是mysqli_result对象,里面应该是有类似于数组一样的机制

/* 属性 */
int $current_field ;
int $field_count;
array $lengths;
int $num_rows;

文档就给了这些属性,完全不知道他是怎么遍历的。。。给的方法也只给了使用方法,希望有大佬留言指教。

另一个需要注意的地方

官方文档对fetch_assoc的方法有这样一段描述
If two or more columns of the result have the same field names, the last column will take precedence. To access the other column(s) of the same name, you either need to access the result with numeric indices by using mysqli_fetch_row() or add alias names.
翻译过来大概意思就是说如果有两个列名称相同的话fetch_assoc方法会让最后那个列的数据取代前面的数据,然后只返回一个数据,如果你想显示所有的数据的话应当使用fetch_row()或者在查询的时候使用别名。
这个问题发生的情况就是你在进行多表查询的时候有时候会出现两张表列重名的情况,这个时候你用fetch_assoc是无法 全部保存在数组里的,因为他里面是以列名为索引,列名重复了,自然就会覆盖前面的值。用fetch_row的话通过自动分配的数字索引就不会有这个问题,而另一个解决办法则是通过使用别名修改保存时的索引值,但是相对的在查询的时候要使用别名作为索引名称。

//$conn是mysqli的实例,table1和table2中都有name列
$result=$conn->query("select table1.name,table2.name as a from table1, table2" );
while($row =$result.fetch_assoc()){
    echo $row['name'].$row['a'];
}

其他的查询方式以后在看吧,感觉这两个可以可以对付大多数情况了,其他的再看吧。最后,请大佬们帮忙解答一下这两个方法大概是怎么实现的~~

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值