iT邦幫忙

0

用php方式寫資料到sql裡的問題

各位大大好:
以下是我建立1個將資料輸入到sql的語法,但有幾個問題出現,需請教一下
1。輸入中文字會出現亂碼
2。如用以下語法進去,則輸入的中文字不會出現(utf8及big5 都一樣)。
mysql_query("SET NAMES 'utf8'",$link);
mysql_query("SET CHARACTER_SET_database= utf8",$link);
mysql_query("SET CHARACTER_SET_CLIENT= utf8",$link);
mysql_query("SET CHARACTER_SET_RESULTS= utf8",$link);
3。用此方法通常新增到第三筆就再新增也沒有看到有資料上去。
4。可否有1個標準的源始碼給我當參考 謝謝
<p>以下為輸入的資訊請確認</p>
<?php
echo "出貨日期 : " .$_POST['textfield1'] ." <br> ";
echo "經銷商 : " .$_POST['textfield2'] ." <br> ";
echo "客戶名稱 :" .$_POST['textfield3'] ." <br> ";
echo "送貨地址 : ".$_POST['textfield4'] ." <br> ";
echo "客戶連絡電話 :" .$_POST['textfield5'] ." <br> ";
echo "客戶連絡手機 : ".$_POST['textfield6'] ." <br> ";
echo "客戶連絡人 : ".$_POST['textfield7'] ." <br> ";
echo "機器型號 : ".$_POST['textfield8'] ." <br> ";
echo "軟體版本 : ".$_POST['textfield9'] ." <br> ";
echo "機器序號 : ".$_POST['textfield10'] ." <br> ";
echo "dom號 : ".$_POST['textfield11'] ." <br> ";
echo "raid序號 : ".$_POST['textfield12'] ." <br> ";
echo "硬碟 : ".$_POST['textfield13'] ." <br> ";
echo "raid卡 :" .$_POST['textfield14'] ." <br> ";
echo "主機板 : ".$_POST['textfield15'] ." <br> ";
echo "ram : ".$_POST['textfield16'] ." <br> ";
echo "cpu : ".$_POST['textfield17'] ." <br> ";
echo "保固 : ".$_POST['textfield18'] ." <br> ";
echo "組裝人 : ".$_POST['textfield19'] ." <br> ";
echo "優惠券 : ".$_POST['textfield20'] ." <br> ";
?>

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

24
pcboy
iT邦大師 6 級 ‧ 2009-05-02 16:50:21
最佳解答

http://www.php.net/manual/en/function.mysql-query.php

PHP 官方網站有很多範例可以抄

看更多先前的回應...收起先前的回應...
kane18456 iT邦新手 5 級 ‧ 2009-05-02 17:45:44 檢舉

大大以下為我的資料
MySQL 資料庫版本 MySQL 5.0.24a
Engine 編碼 這怎麼看?
Database 編碼 utf8_general_ci
Tables 編碼 utf8_general_ci

我用appsvr 2.5.7 裝在windows平台上
AppServ 2.5.7
內建
Apache 2.2.3
PHP 5.1.6
MySQL 5.0.24a
phpMyAdmin-2.9.0.2

請問那如果你的話,都如何寫呢,或我要改什麼即可。

pcboy iT邦大師 6 級 ‧ 2009-05-04 07:21:54 檢舉

資料庫結構

CREATE DATABASE testdb;

CREATE TABLE account (
username varchar(255) NOT NULL,
userpass varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=big5;

useradd.php 內容

<form action="useradd_ok.php" method="POST">
<INPUT NAME="username" /><br />
<INPUT NAME="userpass" /><br />
<input type="submit" value="Send" /><br />
</form>

pcboy iT邦大師 6 級 ‧ 2009-05-04 07:23:59 檢舉

useradd_ok.php 內容

<?

$mysql_host="localhost";
$mysql_user="root";
$mysql_password="password";
$mysql_database="testdb";

// ------------------------------------------------------------

if (!$link = mysql_connect($mysql_host, $mysql_user, $mysql_password)) {
echo 'Could not connect to mysql';
exit;
}
mysql_query("SET NAMES big5", $link);
mysql_query("SET CHARACTER_SET_CLIENT=big5", $link);
mysql_query("SET CHARACTER_SET_RESULTS=big5", $link);

$sql = "INSERT INTO account (username ,userpass )
VALUES ('" . $_POST['username'] . "','" . $_POST['userpass'] . "')";

$result =mysql_db_query($mysql_database, $sql);
if (!$result) {
echo "DB Error, could not query the database\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}

$result_record_counts = mysql_num_rows($result);
echo "Record Count : " . $result_record_counts . "<BR>\n";
printf("Affected Rows: %d<BR>\n", mysql_affected_rows());

pcboy iT邦大師 6 級 ‧ 2009-05-04 07:24:14 檢舉

echo "------- Table account -----------<br>";

$sql = "SELECT * FROM account ";

$result =mysql_db_query($mysql_database, $sql);
if (!$result) {
echo "DB Error, could not query the database\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}

while ($row=mysql_fetch_object($result)) {
echo $row->username . " , " . $row->userpass . "<BR>\n";
}

mysql_free_result($result);

?>

PS: 以上都是剛剛測試過可用的

kane18456 iT邦新手 5 級 ‧ 2009-05-08 16:22:13 檢舉

謝謝你,你的用big5 ok,我將以下資訊改為utf8就出現亂碼了
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />

mysql_query("SET NAMES utf8", $link);
mysql_query("SET CHARACTER_SET_CLIENT=utf8", $link);
mysql_query("SET CHARACTER_SET_RESULTS=utf8", $link);

username varchar(255) utf8_general_ci 否
userpass varchar(255) utf8_general_ci 否

資訊庫校對我也選utf8

18
wonton
iT邦高手 6 級 ‧ 2009-05-04 10:10:14

SET NAMES 'utf8'
上面這一句, 就代表了以下三行
SET CHARACTER_SET_DATABASE='utf8'
SET CHARACTER_SET_CLIENT='utf8'
SET CHARACTER_SET_RESULTS='utf8'
亂碼問題, 其實網站上諸多討論, 去 google 一下以上三行的意義, 會對你有幫助的.
簡單來說, 你 php 檔如果是 big5, 但 DB 如果是 utf8, 就應該
SET CHARACTER_SET_DATABASE='utf8'
SET CHARACTER_SET_CLIENT='big5' // Client 端是 big5 的 php script
SET CHARACTER_SET_RESULTS='big5' // 告訴 mysql 傳回的結果用 big5

另外為什麼第三筆後就沒資料了, 請確認你是否有設定 mysql 的 connection 是 persistent; 若有安裝 mysqli, 也可以以 mysqli 的方式連線確保 persistent.
更簡單的方法是每次 query 前重新 connect mysql 一次, 但很耗資源跟速度.

可以試著把迴圈裡面的sql command print出來debug,另外網頁編碼跟資料庫編碼最好一致(最好是utf-8),這樣可以避免很多亂碼的問題

我要發表回答

立即登入回答