各位大大好:
小弟我目前在寫一些php和Mysql間連動的小程式,但是碰到的問題是:
當要送出query的字串中有一些特別的中文時,就會無法insert或update,
我碰到的是 "俞" 這個字(這應該也是蠻平常的字吧),程式碼如下所示:
$db = new mysqli('localhost','root','1234','AAA');
$query = "update AAA.table1 set user_name='俞' where user_id=1";
$result = $db->query($query);
echo $db->affected_rows;
echo 出來的結果都是 -1,新增也是一樣,就是無法insert和update,
如果是加入其他的中文字的話,例如 "俞如" ,
就可以insert和update,但是會變成亂碼 => "咻p",想請問
各位高手是否有解決的辦法,先謝謝大家耐心地看完了。
PHP:Ver 5.2.0 (PHP5舊一點的版本也是一樣)
MySQL:Ver 5.0.27
Apache:Ver 2.2.3 (有試過架在IIS上也是一樣)
資料表和欄位我都是設utf8
可以真正解答者,我將給予20點。
2006-11-15 00:03:49 · 4 個解答 · 發問者 阿周 1 in 電腦與網際網路 ➔ 電腦網路
Jelly 大大你好,我試過你的方法加\,是可以insert了,但是insert進入的是亂碼,在網頁顯示出來是 "?" ,我的php.ini檔中magic_quotes_gpc是設定為On的,請問還有那邊可以改呢!? (剛試了一下,"許" 也會這樣)
2006-11-16 11:58:15 · update #1
回答以前,想要先請問幾個問題:請問你的網頁是用utf8的編碼嗎?另外要請問的是,在資料庫裡頭是亂碼,叫出資料在網頁呈現的時候也是亂碼嗎?
2006-11-19 23:36:20 補充:
不好意思,沒有空一個字一個字打,所以上網找了這些資料給你,我想應該對您的問題會有一些幫助(文章來源:酷!學園 http://phorum.study-area.org/viewtopic.php?t=36484&highlight=utf8)
1. 用 vi /etc/httpd/conf/httpd.conf 設定Apache中的語系為 (記得restart)
AddDefaultCharset UTF-8
2. 用 vi /etc/php.ini 設定php中的語系為 (記得restart)
default_charset = "utf-8"
3. 用 vi /etc/my.cnf 設定MySQL中的語系為 (記得restart)
[mysqld]
init_connect='SET NAMES utf8'
default-character-set=utf8
[client]
default-character-set = utf8
4. 建立資料庫時選擇語系: (記得清除DB Cache)
DROP DATABASE IF EXISTS `aa`;
CREATE DATABASE `aa` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
USE `aa`;
CREATE TABLE IF NOT EXISTS `aat` (
`id` char(1) NOT NULL default '1',
`myStr` varchar(200) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
5. 用UltraEdit(v11.20a版) 轉換所有ANSI格式的php檔案轉化為UTF-8格式:
File --> Conversions --> ASCII to UTF-8 (Unicoding Editing)
( 在UltraEdit中按Advanced --> configuration --> File Handling
--> Unicode/UTF-8 Detection --> 剔選Auto detect utf-8 files )
如有需要時,可執行Remove BOM.php. 當用WinXP的Notepad將php檔由ANSI轉為UTF-8時,
因檔頭有BOM,會引起排版問題,故必須移除,執行Remove BOM.php即可自動移除.
Remove BOM.php可由以下網址下載:
http://www.hoyo.idv.tw/hoyoweb/document/view.php?sid=13&author=hoyo&status=view
6. 在php檔中必須加入:
2006-11-19 18:36:20 · answer #1 · answered by ? 2 · 0⤊ 0⤋
我之前也被這個問題整的很慘
後來才知道
在 mysql_connect() 之後
加上 mysql_query("set names 'utf8' "); 就可以使用中文了
ps. utf8 可以改成其他編碼
2006-11-19 11:47:19 · answer #2 · answered by johnroyerkimo 2 · 0⤊ 0⤋
我都是用MySql的Query Brower來看,可是裡面的中文都是亂碼,所以我也不知道在資料庫中是不是亂碼,不過感覺應該是亂碼,另外我在php.ini中,default_charset和mbstring.internal_encoding和mbstring.http_output都是設定為utf8, 不知道這是不是網頁用utf8編碼的意思.
2006-11-16 11:42:01 · answer #3 · answered by 阿周 1 · 0⤊ 0⤋
這是一個衝碼字的問題唷你試看看在中文字後面加上\試看看 應該就可以嚕例: ' 俞\ ' 記得\要和 ' ' 空一格 不然會變成 脫逸'唷不過我記得資料庫 有自己會判斷 並自動處理衝碼字的問題你可以找看看你的 php.ini檔看看 magic_quotes_gpc的設定是不是 on如果是on就應該不會有問題才對如果設定是off 那你可以改成on 若你堅持它要是off 可以有一個比較簡單的做法if(!get_magic_quotes_gpc()){ $user_name = addslashes($user_name)}這樣的話 如果if(!get_magic_quotes_gpc() 回傳是0就會執行$user_name = addslashes($user_name)自動為衝碼字加上 \
2006-11-17 10:33:32 補充:
衝碼字是一大堆的 幾千幾百個吧 所以你不用一個個慢慢試了 = =就一律做$user_name = addslashes($user_name)addslashes就是 替衝碼字加\ 的意思如果有做這個動作 但還是亂碼請檢查看看 你的網頁編碼方式是big5 或 utf-8再檢查看看你的資料庫編碼方式基本上兩邊要一樣 比較不會有問題
2006-11-15 04:30:12 · answer #4 · answered by Jelly 7 · 0⤊ 0⤋