首頁 > 後端開發 > php教程 > php學習正式啟航(6)

php學習正式啟航(6)

黄舟
發布: 2023-03-04 11:38:02
原創
995 人瀏覽過

現在講講php的錯誤處理

<?php
$file=fopen("1.txt","r");
?>
登入後複製

如果文件不存在系統會直接報錯誤
用die就可以自己寫錯誤訊息die是死亡的意思,表示錯誤

為了避免用戶獲得類似上面的錯誤訊息,我們在存取文件之前檢測該文件是否存在

<?php
if(!file_exists("1.txt"))
{
die("File not found");
}
else
{
$file=fopen("1.txt","r");
}
?>
登入後複製

如果文件不存在,會打印File not found,而不是系統冒出的錯誤


其實php的錯誤處理遠不止這些,後面還有異常等
放在以後在說吧

現在開始重頭戲,終於要用php對mysql數據庫進行操作了

首先是連接數據庫

<?php
$link = mysql_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;&#39;);
if (!$link) {
die(&#39;Could not connect to MySQL: &#39; . mysql_error());
}
echo &#39;Connection OK&#39;; mysql_close($link);
?>
登入後複製

$link 這個又是一個資源變量,表示數據庫連接狀態,你可以

<?php
$link = mysql_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;&#39;);
if (!$link) {
die(&#39;Could not connect to MySQL: &#39; . mysql_error());
}
mysql_select_db(&#39;test&#39;,$link);
mysql_query("insert into user (name,age) values (&#39;harry&#39;,15)",$link);
mysql_close($link);
?>
登入後複製

$link 這個又是一個資源變量,表示數據庫連接狀態,你可以試著列印看看會出現什麼
mysql_connect函數就是連接mysql資料庫啦
有3個函數分別是伺服器位址資料庫使用者名稱資料庫使用者密碼
mysql_error函數可以知道連線錯誤原因
mysql_close是關閉資料庫使用者名稱資料庫使用者密碼

mysql_error函數可以知道連線錯誤原因

mysql_close是關閉資料庫連線

現在先建立一個資料庫php學習正式啟航(6)create database test;

然後建立一個表格



超級簡單吧php學習正式啟航(6)

進入phpmyadmin看看

php學習正式啟航(6)

資料庫了,接著我們要在mysql其中一個資料庫插入資料了


<html>
<body> <form action="" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form> </body>
</html>
登入後複製

mysql_select_db就是選擇資料庫的函數

mysql_query就是執行sql語句的函數,任何sql都可執行,包括建立資料庫和表

兩個函數的第2個參數可以省略
mysql_select_db('test');
mysql_query("insert into user (name,age) values ('harry',15)");
如果第2個參數沒有指定連接標識符,則使用上一個開啟的連線。如果沒有打開的連接,將無參數調用 mysql_connect() 來嘗試打開一個並使用之

現在看看是否能插入成功


php學習正式啟航(6)ok 已經插入了

現在我們用表插入數據

<?php
$name=$_POST[&#39;name&#39;];
$age=$_POST[&#39;age&#39;];
if(isset($name)&&isset($age))
{
$link = mysql_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;&#39;);
if (!$link) {
die(&#39;Could not connect to MySQL: &#39; . mysql_error());
}
mysql_select_db(&#39;test&#39;);
$sql="insert into user (name,age) values (&#39;$name&#39;,$age)";
if(mysql_query($sql))
echo "Insert Success!";
else
echo "Insert Fail!".mysql_error();
mysql_close($link);
}
?>
登入後複製
<html>
<body> <form action="" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
<?php
//数据库连接
$link = mysql_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;&#39;);
if (!$link) {
die(&#39;Could not connect to MySQL: &#39; . mysql_error());
}
mysql_select_db(&#39;test&#39;); //插入
$name=$_POST[&#39;name&#39;];
$age=$_POST[&#39;age&#39;];
if(isset($name)&&isset($age))
{ $sql="insert into user (name,age) values (&#39;$name&#39;,$age)";
if(mysql_query($sql))
echo "Insert Success!";
else
echo "Insert Fail!".mysql_error(); }
//查询
$sql="select * from user";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result))
{
echo "<table>";
echo "<tr>";
echo "<td>" . $row[&#39;id&#39;] . "</td>";
echo "<td>" . $row[&#39;name&#39;] . "</td>";
echo "<td>" . $row[&#39;age&#39;] . "</td>";
echo "</tr>";
echo "</table>";
} mysql_free_result($result);
mysql_close($link); ?>
</body>
</html>
登入後複製

mysql_query() 在執行sql語句成功時回傳 TRUE,出錯時回傳 FALSE

現在來顯示資料吧



echo "<td>" . $row[0] . "</td>";
echo "<td>" . $row[1] . "</td>";
echo "<td>" . $row[2] . "</td>";
登入後複製


_$result=mysql_query查詢sql語句的時候,其回傳結果就不再是true和false ,而是個結果集,你可以想像就是mysql_query查詢的結果回傳一張表給了$result,$result就是一張表(結果集)

mysql_fetch_array函數則是專門處理結果集的,從結果集中取得一行作為關聯數組,或數字數組,或二者兼有,mysql_query($sql); 其本身就是結果集了
為什麼要循環呢,因為mysql_fetch_array一次只能在結果集(表)取一行資料
然後把這一行資料以一維關聯數組的形式給$row,$row就是一維關聯數組
mysql_fetch_array有個指標指著每一行,每當執行完這個函數的時候,指標會自動指向下一行,如果當函數再次被執行,就能取得到這行的數據,直到最後一行,指標就會指向空的,所以循環也會因為空而結束
不要以為$row是二維數組,它一直是一維,而且每循環一次就被重新賦值一次
有人可能懷疑,數組也能做為循環條件?可以的
$a=array(1,2)
while($a)
這樣是能夠循環的,只不過是死循環
因為while括號裡只要不為0的東東都能循環


$row ['name'] 就個就是從數組裡取值了,關聯數組還記得吧
其實數組下標也可以的,之前沒說,其實關聯數組也具有普通數組的特性,且更強大
所以這是可以的

$sql="select * from user";
$result=mysql_query($sql);
while($row = mysql_fetch_row($result))
{
echo "";
echo "";
echo "<td>" . $row[0] . "</td>";
echo "<td>" . $row[1] . "</td>";
echo "<td>" . $row[2] . "</td>";
echo "";
echo "
"; }
登入後複製
登入後複製

mysql_free_result是釋放資源
不是必須使用,只需要在考慮到傳回很大的結果集時會佔用多少記憶體時呼叫。在腳本結束後所有關聯的記憶體都會被自動釋放的




另外mysql_fetch_row也可以查詢結果,不過跟mysql_fetch_array比,弱爆了,這裡只是介紹下曾經有這麼個東西。 。 。

//查詢


$sql="select * from user";
$result=mysql_query($sql);
while($row = mysql_fetch_row($result))
{
echo "";
echo "";
echo "<td>" . $row[0] . "</td>";
echo "<td>" . $row[1] . "</td>";
echo "<td>" . $row[2] . "</td>";
echo "";
echo "
"; }
登入後複製
登入後複製

mysql_fetch_row() 从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个数组的单元中
则row不再是关联数组而是普通数组,所以只能用数组下标


下面说说几个常用的数据显示函数
int mysql_num_rows ( resource $result )
mysql_num_rows() 返回结果集中行的数目。此命令仅对 SELECT 语句有效
int mysql_num_fields ( resource $result )
mysql_num_fields() 返回结果集中字段的数目
int mysql_insert_id ([ resource $link_identifier ] )
mysql_insert_id() 返回给定的 link_identifier 中上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号

重新写下

 
 
Name: Age:
"; echo ""; echo "<td>" . $row[0] . "</td>"; echo "<td>" . $row[1] . "</td>"; echo "<td>" . $row[2] . "</td>"; echo ""; echo ""; } echo "总共".mysql_num_rows($result)."记录
"; echo "每行".mysql_num_fields($result)."字段"; mysql_free_result($result); mysql_close($link); ?>
登入後複製

header("Content-Type:text/html;charset=gbk"); 这个是表明文件编码格式,显示中文需要这样
error_reporting(0); 屏蔽一切系统提示的注意,警告,和错误

现在完成 修改和删除部分

<?php
header("Content-Type:text/html;charset=gbk");
error_reporting(0);
?> <html>
<body> <form action="" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form> <?php
//数据库连接
$link = mysql_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;&#39;);
if (!$link) {
die(&#39;Could not connect to MySQL: &#39; . mysql_error());
}
mysql_select_db(&#39;test&#39;);
//插入
$name=$_POST[&#39;name&#39;];
$age=$_POST[&#39;age&#39;];
if(isset($name)&&isset($age))
{ $sql="insert into user (name,age) values (&#39;$name&#39;,$age)";
if(mysql_query($sql))
echo "Insert Success!";
else
echo "Insert Fail!".mysql_error(); } /
/查询
$sql="select * from user";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result))
{
?>
<form action="" method="post">
ID: <?=$row[&#39;id&#39;]?>
Name: <input type="text" name="_name" value="<?=$row[&#39;name&#39;]?>"/>
Age: <input type="text" name="_age" value="<?=$row[&#39;age&#39;]?>" />
<input type="hidden" name="id" value="<?=$row[&#39;id&#39;]?>" />
<input type="submit" value="修改"/>
<a href="index.php?uid=<?=$row[&#39;id&#39;]?>">删除</a>
</form> <?php
} echo "总共".mysql_num_rows($result)."记录<br/>";
echo "每行".mysql_num_fields($result)."字段";
//修改
$name=$_POST[&#39;_name&#39;];
$age=$_POST[&#39;_age&#39;];
$id=$_POST[&#39;id&#39;];
if(isset($name)&&isset($age)&&isset($id))
{ $sql="update user set name=&#39;$name&#39;,age=&#39;$age&#39; where id=$id";
if(mysql_query($sql))
header("location:index.php");
else
echo "Update Fail!".mysql_error(); }
//删除
$uid=$_GET[&#39;uid&#39;];
if(isset($uid))
{ $sql="delete from user where id=$uid";
if(mysql_query($sql))
header("location:index.php");
else
echo "Delete Fail!".mysql_error(); }
mysql_close($link); ?>
</body>
</html>
登入後複製


至此,php对mysql数据库的增删改查操作就全在这一个页面了,灰常的简单

加了个简单的分页,超简单的。。。。暂时就不讲解怎么个来的了,加了简单的注释,大家应该能看懂代码

<?php
header("Content-Type:text/html;charset=gbk");
error_reporting(0);
?> <html>
<body> <form action="" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form> <?php
//数据库连接
$link = mysql_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;&#39;);
if (!$link) {
die(&#39;Could not connect to MySQL: &#39; . mysql_error());
}
mysql_select_db(&#39;test&#39;); //插入
$name=$_POST[&#39;name&#39;];
$age=$_POST[&#39;age&#39;];
if(isset($name)&&isset($age))
{ $sql="insert into user (name,age) values (&#39;$name&#39;,$age)";
if(mysql_query($sql))
echo "Insert Success!";
else
echo "Insert Fail!".mysql_error(); } //分页查询
if(isset($_GET[&#39;pager&#39;]))
$pager=($_GET[&#39;pager&#39;]-1)*5;
else
$pager=0; $sql="select * from user";
$result=mysql_query($sql);
$num=mysql_num_rows($result); //总共记录数
$page=ceil($num/5); //总共多少页 这里每页5条记录 ceil函数四舍五入的。。
for($i=1;$i<=$page;$i++)
echo "<a href=&#39;index.php?pager=".$i."&#39;>".$i."</a>"; $
sql="select * from user limit $pager,5";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result))
{
?>
<form action="" method="post">
ID: <?=$row[&#39;id&#39;]?>
Name: <input type="text" name="_name" value="<?=$row[&#39;name&#39;]?>"/>
Age: <input type="text" name="_age" value="<?=$row[&#39;age&#39;]?>" />
<input type="hidden" name="id" value="<?=$row[&#39;id&#39;]?>" />
<input type="submit" value="修改"/>
<a href="index.php?uid=<?=$row[&#39;id&#39;]?>">删除</a>
</form> <?php
} echo "总共".$num."记录<br/>";
echo "每行".mysql_num_fields($result)."字段"; //修改
$name=$_POST[&#39;_name&#39;];
$age=$_POST[&#39;_age&#39;];
$id=$_POST[&#39;id&#39;];
if(isset($name)&&isset($age)&&isset($id))
{ $sql="update user set name=&#39;$name&#39;,age=&#39;$age&#39; where id=$id";
if(mysql_query($sql))
header("location:index.php");
else
echo "Update Fail!".mysql_error(); }
//删除
$uid=$_GET[&#39;uid&#39;];
if(isset($uid))
{ $sql="delete from user where id=$uid";
if(mysql_query($sql))
header("location:index.php");
else
echo "Delete Fail!".mysql_error(); }
mysql_close($link); ?>
</body>
</html>
登入後複製

暂时先到这里了
php后面内容还有很多,还有对象等知识,光数据操作就还有面向对象的

 以上就是php学习正式起航(6)的内容,更多相关内容请关注PHP中文网(www.php.cn)!


相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板