延續上一篇「[鐵人賽Day28]PHP連結SQL Server(MSSQL)的方法與測試連線」
今天要來提的是PHP連線MSSQL後的搜尋資料、新增資料、更新(修改)資料、刪除資料
其實,說破一點,就是在SQL指令上動手腳而已
而這邊要注意的是,由於MSSQL的編碼是BIG5,所以要是網頁編碼是UTF-8會抓出資料產生亂碼
同時,沒有指定編碼的話,在寫入資料時,也會因為不是BIG5而令寫入的資料變為亂碼
解決方法:在$connectionInfo連線資料的地方,加上"CharacterSet"=>"UTF-8"(指定資料傳送到伺服器的編碼)即可解決此問題
(參考資料:http://msdn.microsoft.com/en-us/library/ff628167.aspx)
在這之後要與各位分享的是,簡易的新增資料、更新(修改)資料、刪除資料的實作,有興趣的讀者可以複製回自己的環境試看看,請服用@@(只是體驗一下動作如何進行,真要使用請修改後再使用)
資料庫:ithome_test
資料表:good_idea
欄位1:id 型別:int Other:自動編號
欄位2:idea1 型別:varchar(50)
欄位3:idea2 型別:varchar(50)
(以下說明,皆是一個操作介面搭配一個動作)
先來說INSERT,新增資料的地方
「mssql_input_insert.php」
<title>MSSQL新增資料</title>
<meta http-equiv="content-type" content="text/html" charset="UTF-8"/>
<h1>新增資料到MSSQL</h1>
<form method="POST" action="./mssql_insert.php">
輸入值1:<input id="idea1" name="idea1" type="text" /><br />
輸入值2:<input id="idea2" name="idea2" type="text" /><br />
<input id="submit" name="submit" type="submit" value="確定送出" />
</form>
(注意:這邊所有的SQL語法內皆不能有「前導符號 [ ˋ ]」)
「mssql_insert.php」
<title>MSSQL新增資料</title>
<meta http-equiv="content-type" content="text/html" charset="UTF-8"/>
<h1>新增資料到MSSQL</h1>
<?php
$serverName="127.0.0.1\SQLEXPRESS, 1433";
$connectionInfo=array("Database"=>"ithome_test", "UID"=>"sa", "PWD"=>"mssql_test", "CharacterSet"=>"UTF-8");
$conn=sqlsrv_connect($serverName, $connectionInfo);
$idea1=$_POST['idea1'];
$idea2=$_POST['idea2'];
echo "輸入值1:".$idea1;
echo "<br />";
echo "輸入值2:".$idea2;
echo "<br /><br />";
$sql="INSERT INTO good_idea(idea1,idea2) VALUES('$idea1','$idea2')";
$query=sqlsrv_query($conn,$sql)or die("sql error".sqlsrv_errors());
$sql2="select * from good_idea";
$result=sqlsrv_query($conn,$sql2)or die("sql error".sqlsrv_errors());
echo "讀取good_idea的值:<br />";
while($row=sqlsrv_fetch_array($result)){
echo ("<table border=1px><tr>");
echo ("<td>編號:").$row["id"].("</td>");
echo ("<td>輸入值1:").$row["idea1"].("</td>");
echo ("<td>輸入值2:").$row["idea2"].("</td>");
echo ("</tr></table>");
echo ("<hr />");
}
?>
輸出畫面如以下圖示:
--------------------以上為INSERT,以下為UPDATE--------------------
接著是UPDATE更新的部分,這邊是事先就帶出部分值給使用者選擇將更新的資料
(友人:本來就是這樣不是嗎,不然要怎找要改的資料)
「mssql_input_update.php」
<title>MSSQL更新資料</title>
<meta http-equiv="content-type" content="text/html" charset="UTF-8"/>
<h1>更新MSSQL資料</h1>
<form method="POST" action="./mssql_update.php">
原先idea1值:<select id="check" name="check">
<?php
$serverName="127.0.0.1\SQLEXPRESS, 1433";
$connectionInfo=array("Database"=>"ithome_test", "UID"=>"sa", "PWD"=>"mssql_test", "CharacterSet"=>"UTF-8");
$conn=sqlsrv_connect($serverName, $connectionInfo);
$sql2="select * from good_idea";
$result=sqlsrv_query($conn,$sql2)or die("sql error".sqlsrv_errors());
while($row=sqlsrv_fetch_array($result)){
echo ('<option value="'.$row['id'].'">').$row['id'].('-').$row['idea1'].('</option>');
}
?>
</select>
<br />
輸入值1更改為:<input id="idea1" name="idea1" type="text" /><br />
輸入值2更改為:<input id="idea2" name="idea2" type="text" /><br />
<input id="submit" name="submit" type="submit" value="確定送出" />
</form>
「mssql_update.php」
<title>MSSQL更新資料</title>
<meta http-equiv="content-type" content="text/html" charset="UTF-8"/>
<h1>更新MSSQL資料</h1>
<?php
$serverName="127.0.0.1\SQLEXPRESS, 1433";
$connectionInfo=array("Database"=>"ithome_test", "UID"=>"sa", "PWD"=>"mssql_test", "CharacterSet"=>"UTF-8");
$conn=sqlsrv_connect($serverName, $connectionInfo);
$check=$_POST['check'];
$idea1=$_POST['idea1'];
$idea2=$_POST['idea2'];
echo "修改的id值:".$check;
echo "<br />";
echo "輸入值1:".$idea1;
echo "<br />";
echo "輸入值2:".$idea2;
echo "<br /><br />";
$sql="UPDATE good_idea SET idea1='$idea1',idea2='$idea2' WHERE id='$check'";
$query=sqlsrv_query($conn,$sql)or die("sql error".sqlsrv_errors());
$sql2="select * from good_idea";
$result=sqlsrv_query($conn,$sql2)or die("sql error".sqlsrv_errors());
echo "讀取good_idea的值:<br />";
while($row=sqlsrv_fetch_array($result)){
echo ("<table border=1px><tr>");
echo ("<td>編號:").$row["id"].("</td>");
echo ("<td>輸入值1:").$row["idea1"].("</td>");
echo ("<td>輸入值2:").$row["idea2"].("</td>");
echo ("</tr></table>");
echo ("<hr />");
}
?>
輸出畫面如以下圖示:
--------------------以上為UPDATE,以下為DELETE--------------------
好了,接著要說最後一個基本功能刪除資料
這是一個很強大很恐怖,執行了就不見的功能,慎用!
(啊嚇死人的功能啊(你是在叫魂唷(台語)=口=))
(DELETE操作介面與UPDATE操作介面大同小異(是根本一樣好嗎...不過是改幾個字))
「mssql_input_delete.php」
<title>MSSQL刪除資料</title>
<meta http-equiv="content-type" content="text/html" charset="UTF-8"/>
<h1>刪除MSSQL資料</h1>
<form method="POST" action="./mssql_delete.php">
請選擇要刪除的idea1值:<select id="check" name="check">
<?php
$serverName="127.0.0.1\SQLEXPRESS, 1433";
$connectionInfo=array("Database"=>"ithome_test", "UID"=>"sa", "PWD"=>"mssql_test", "CharacterSet"=>"UTF-8");
$conn=sqlsrv_connect($serverName, $connectionInfo);
$sql2="select * from good_idea";
$result=sqlsrv_query($conn,$sql2)or die("sql error".sqlsrv_errors());
while($row=sqlsrv_fetch_array($result)){
echo ('<option value="'.$row['id'].'">').$row['id'].('-').$row['idea1'].('</option>');
}
?>
</select>
<br />
<input id="submit" name="submit" type="submit" value="確定送出" />
</form>
「mssql_delete.php」
<title>MSSQL刪除資料</title>
<meta http-equiv="content-type" content="text/html" charset="UTF-8"/>
<h1>刪除MSSQL資料</h1>
<?php
$serverName="127.0.0.1\SQLEXPRESS, 1433";
$connectionInfo=array("Database"=>"ithome_test", "UID"=>"sa", "PWD"=>"mssql_test", "CharacterSet"=>"UTF-8");
$conn=sqlsrv_connect($serverName, $connectionInfo);
$check=$_POST['check'];
$sql="DELETE FROM good_idea WHERE id='$check'";
$query=sqlsrv_query($conn,$sql)or die("sql error".sqlsrv_errors());
if($query){
echo '刪除id值:'.$check.'成功<br />';
}else{
echo "刪除失敗,請檢查內碼並除BUG<br />";
}
$sql2="select * from good_idea";
$result=sqlsrv_query($conn,$sql2)or die("sql error".sqlsrv_errors());
echo "讀取good_idea的值:<br />";
while($row=sqlsrv_fetch_array($result)){
echo ("<table border=1px><tr>");
echo ("<td>編號:").$row["id"].("</td>");
echo ("<td>輸入值1:").$row["idea1"].("</td>");
//echo "輸入值1:".$row[0];
echo ("<td>輸入值2:").$row["idea2"].("</td>");
//echo "輸入值2:".$row[1];
echo ("</tr></table>");
echo ("<hr />");
}
?>
輸出畫面如以下圖示:
--------------------完成FINISH--------------------
PHP搭配SQL Server(MSSQL)篇,介紹完畢,多謝各位觀看
請問一下,我是用ODBC的方式來連接如下
$server="IP";
$database="資料庫名稱";
$user="sa";
$password="密碼";
$cnx = odbc_connect("Driver={SQL Server};Server=$server;Database=$database;", $user, $password);
但ODBC無法加入"CharacterSet"=>"UTF-8"
是否有別的語法可以幫幫忙??
謝謝
這我就不是很清楚了,但有查道與你相似的提問,供您參考
How to set UTF8 on PHP when connect to ACCESS 2007 (ODBC)
(http://stackoverflow.com/questions/12996926/how-to-set-utf8-on-php-when-connect-to-access-2007-odbc)
Problems with encoding (PHP+ODBC+MSSQL Server 7.0)
(https://www.daniweb.com/web-development/php/threads/464329/problems-with-encoding-php-odbc-mssql-server-7-0)
請問 欄位1:id 型別:怎麼設定自動編號?
sqlsrv_close($conn);
$idea1=$_POST['idea1'];
$idea2=$_POST['idea2'];
echo "輸入值1:".$idea1;
echo "<br />";
echo "輸入值2:".$idea2;
echo "<br /><br />";
$sql="INSERT INTO good_idea(idea1,idea2) VALUES('$idea1','$idea2')";
$query=sqlsrv_query($conn,$sql)or die("sql error".sqlsrv_errors());
$sql2="select * from good_idea";
$result=sqlsrv_query($conn,$sql2)or die("sql error".sqlsrv_errors());
echo "讀取good_idea的值:<br />";
while($row=sqlsrv_fetch_array($result)){
echo ("<table border=1px><tr>");
echo ("<td>編號:").$row["id"].("</td>");
echo ("<td>輸入值1:").$row["idea1"].("</td>");
echo ("<td>輸入值2:").$row["idea2"].("</td>");
echo ("</tr></table>");
echo ("<hr />");
}
?>
</body>
結果會顯示
我PHP版本是7版,不知道哪裡有問題
Question:請問 欄位1:id 型別:怎麼設定自動編號?
Ans:自動編號是MySQL欄位設置的方面的操作
請教old 大大,那你知道MSSQL要怎麼設定嗎?
感謝 old 大大,我會了