iT邦幫忙

DAY 29
1

遭遇PHP之經驗分享系列 第 29

[鐵人賽Day29]PHP搭配SQL Server(MSSQL)的基本操作

延續上一篇「[鐵人賽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)篇,介紹完畢,多謝各位觀看


上一篇
[鐵人賽Day28]PHP連結SQL Server(MSSQL)的方法與測試連線
下一篇
[鐵人賽Day30]使用PHP&MySQL配合jQuery UI Autocomplete實作自動完成功能
系列文
遭遇PHP之經驗分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
阿偉
iT邦新手 2 級 ‧ 2015-06-11 10:08:28

請問一下,我是用ODBC的方式來連接如下
$server="IP";
$database="資料庫名稱";
$user="sa";
$password="密碼";
$cnx = odbc_connect("Driver={SQL Server};Server=$server;Database=$database;", $user, $password);

但ODBC無法加入"CharacterSet"=>"UTF-8"
是否有別的語法可以幫幫忙??

謝謝

Old Siao iT邦研究生 1 級 ‧ 2015-06-26 08:54:59 檢舉

這我就不是很清楚了,但有查道與你相似的提問,供您參考
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)

0
bojing
iT邦新手 5 級 ‧ 2019-11-06 14:55:24

請問 欄位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>

結果會顯示
https://ithelp.ithome.com.tw/upload/images/20191106/20116916aX6K0u4V4J.jpg

我PHP版本是7版,不知道哪裡有問題

看更多先前的回應...收起先前的回應...
Old Siao iT邦研究生 1 級 ‧ 2019-11-11 17:01:46 檢舉

Question:請問 欄位1:id 型別:怎麼設定自動編號?
Ans:自動編號是MySQL欄位設置的方面的操作
https://ithelp.ithome.com.tw/upload/images/20191111/20091333Vq6hesg4U0.png

bojing iT邦新手 5 級 ‧ 2019-11-14 11:43:29 檢舉

請教old 大大,那你知道MSSQL要怎麼設定嗎?

Old Siao iT邦研究生 1 級 ‧ 2019-11-15 10:24:17 檢舉
bojing iT邦新手 5 級 ‧ 2019-11-19 13:38:58 檢舉

感謝 old 大大,我會了

我要留言

立即登入留言