asp通过ado与数据库通信
asp.net通过ado.net与数据库通信
php通过xxx与mysql通信
……
php与mysql之间的通信是非常简单的,这里以刚写一个简单的留言本为例进行说明
$pageindex = 1; //设置当前页码
if(isset($_GET['page']) && is_numeric($_GET['page']))
$pageindex = intval($_GET['page']); //获取页码
$comments = array(); //初始化评论列表的数组
$pagesize = 5; //每页显示的记录数
//这里用的是php5的一个新的扩展mysqli,比mysql模块性能更好。
@$db = new mysqli('localhost','root','123456','guestbook'); //建立一个mysql数据库的连接
if(mysqli_errno($db)) //是否有错误发生,如数据库不存在/用户名密码不正确等。
{
echo mysqli_error($db);
exit;
}
$limit = ($pageindex-1)*$pagesize; //计算起始索引,为分页准备。
$query = 'select count(0) as c from notebook '; //建立sql语句
$result = $db->query($query); //调用query方法得到结果。这里的$result是一个'资源"类型的数据
$rowCount = $result->fetch_object(); //将$result 转变为一个object,sql语句中的别名c就是该object的一个属性了,是不是很方便呢?
$rowCount = $rowCount->c;
//分页查询留言数,注意mysql中limit总是放在语句的最后。
$query = 'select id,username,email,comment,commentDate from notebook order by id desc limit '.$limit.','.$pagesize;
$result = $db->query($query);
//mysqli_fetch_array方法将$result变量转为一个数组并且赋值给$row变量,$row变量为一数组,该数组的键为sql语句中的各字段,值为字段值。
while($row = mysqli_fetch_array($result))
{
$comments[] = array('id'=>$row['id'],'name'=>$row['name'],'mail'=>$row['mail'],'comment'=>$row['comment'],'dt'=>$row['commentdate']);
}
if($rowCount==0)
echo "暂时没有留言";
else
{
//显示留言
for($i = 0;$i<count($comments);$i++)
{
echo "<div>n";
echo '<div>昵称:'.$comments[$i]['name'].',发表时间:'.$comments[$i]['dt'].'</div>';
echo '<div>'.nl2br($comments[$i]['comment']).'</div>';
echo "</div>";
}
$pager = new pager($pagesize,$pageindex,$rowCount);
$pager->displayPagestr();
mysqli_free_result($result); //调用mysqli_free_result方法释放$result占用的内存。
}
//其它更多代码
这里主要注意mysqli对象,在构造mysqli实例时可以忽略掉所有的参数,如hostname/username/password/dbname,然后在运行时指定这些参数。
注意上面代码中用到了@来进行容错。
然后直接调用数据库资源的query方法进行查询就行了。
$result = $db->query($query);,注意query方法始终返回一个resource类型的结果。
在这里要注意的是:我们可以用面向对象的方法来处理这个结果,也可以用过程方式来处理。
OOP方式:
$rowCount = $result->fetch_object();
调用$result的fetch_object()方法返回一个object类型数据
过程方式:
$row = mysqli_fetch_array($result),这里用mysqli_fetch_array方法将迭代变量$result,将将每一行数据返回成一个数组。
这二种方式都可以使用。
如果我们的查询是一个select的话,mysqli_num_rows($result)可以得到查询的结果。
如果我们是一个insert/update/delete的话,mysqli_affected_rows($db)可以得到受这条sql语句操作而影响到的记录数。
写入数据:
$post = $_POST; //$_POST为超级全局变量,保存所有POST过来的数据,以数组形式保存
if(isset($post) && count($post)>0) //判断$_POST有没有值。
{
if(empty($post['username']) || empty($post['comment']))
{
echo "必须写用户名与内容";
}
else
{
$uname = htmlspecialchars($post['username']); //具体请参见htmlspecialchars函数。
$email = htmlspecialchars($post['email']);
$comment = htmlspecialchars(($post['comment']));
@ $db = new mysqli('localhost','root','123456','guestbook');
if(mysqli_errno($db)>0)
{
echo mysqli_error($db);
exit;
}
$query = 'insert into notebook (username,email,comment,commentdate,age) values (?,?,?,now(),?)'; //构造sql语句
$smtm = $db->prepare($query); //构造一个mysqli_stmt类型的变量,参见http://cn2.php.net/manual/en/mysqli.prepare.php
$i = 1;
$smtm->bind_param('ssss',$uname,$email,$comment,$age); //给占位符赋值,类似于ado.net中的SqlParameter
$smtm->execute(); //执行
//echo mysqli_affected_rows($db).' row(s) affected;';
$db->close();
header('gbook.php5');
exit;
}
}
与mysql的通信就是这么简单
connect->query->close()。
哈哈,学习了。
上周也在看PHP圣经,感觉PHP和Python还是很像的。比较简洁。
mysql扩展的mysql_fetch_array函数无法使用mysqli扩展的mysqli_query()函数返回的结果集,不知,有没有什么解决办法