ปัญหาการ select ใน MySql ด้วย PHP

สำหรับผู้ที่ เริ่มต้น Programming - PHP มีอะไร แนะนำ หรือข้อสงสัยต้องบอร์ด นี้ คนที่มีความรู้ แบ่งปันคนอื่นบ้างนะ ปัญหาการเขียนโปรแกรม แบบ OOP Session Cookies php network

Moderators: mindphp, ผู้ดูแลกระดาน

User avatar
ilovephp
PHP Newbie
PHP Newbie
Posts: 2
Joined: 01/01/1970 7:00 am

ปัญหาการ select ใน MySql ด้วย PHP

Postby ilovephp » 18/10/2007 11:16 pm

* ขอบคุณที่เข้ามาอ่านครับ ยาวหน่อยนะครับ *

MySql เป็นเวอร์ชั่น 4.1.7 เป็นปัญหามานานแล้วครับ ยังแก้ไม่ได้เลย
หลัง mysql_connect ผมก็สั่ง SET NAMES TIS620 แล้ว
เวลา สั่ง select ข้อมูลด้วยช่องว่าง หรือ ข้อมูลที่นำมา select นั้นเกิน 16 ตัวอักษร
MySql ก็จะดับไปเลย restart MySql อย่างเดียวก็ไม่ได้ ต้อง restart server เลยครับ
ผมกำหนด การเรียงลำดับ ใน phpMyAdmin เป็น tis620 ในทุก Table,Field
อันนี้เป็นฐานข้อมูลใหม่ของระบบใหม่ที่ผมสร้างขึ้นมา

ตัวอย่าง error log ครับ ตรง agent_id integer(5) ,name เป็น varchar(100)

key_buffer_size=67108864
read_buffer_size=1044480
max_used_connections=8
max_connections=650
threads_connected=3
It is possible that mysqld could use up to
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections = 2059730 K
bytes of memory
Hope that's ok; if not, decrease some variables in the equation.

thd=0x8d20808
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
Cannot determine thread, fp=0xa949ff84, backtrace may not be correct.
Stack range sanity check OK, backtrace follows:
0x814aecd
0x6688b8
Stack trace seems successful - bottom reached
Please read http://dev.mysql.com/doc/mysql/en/Using ... trace.html and follow instructions on how to resolve the stack trace. Resolved
stack trace is much more helpful in diagnosing the problem, so please do
resolve it
Trying to get some variables.
Some pointers may be invalid and cause the dump to abort...
thd->query at 0x8d6d708 = select agent_id,name from agent where (agent_id='') or (name='โซนี่ พิคเจอร์ส แอนิเมชั่น')
thd->thread_id=531
The manual page at http://www.mysql.com/doc/en/Crashing.html contains
information that should help you find out what is causing the crash.
Fatal signal 11 while backtracing

-----------------------------------------------------------------------------------------------------------------
แล้ว MySql ก็จะดับไปเลย ต้อง Restart Server อย่างเดียวเท่านั้น
-----------------------------------------------------------------------------------------------------------------

ที่ไม่ set ในMy.Cnf เป็น tis620 เพราะฐานข้อมูลเก่าๆ บันทึกเป็น latin1
เช่น board phpBB2 ถ้าเปลี่ยน default-character-set=tis620 ตรงคำสั่ง
Group by ที่เป้น field varchar ก็จะมี error ไม่สามารถใช้ group by กับ field ที่เป้น varchar หรือ text field ได้ MySql ก็จะดับไปเลย
error phpBB ครับ ถ้าตัด g.group_name ออกก็จะรันได้ครับ แต่ก็ไปติด group by ตัวอื่นอีก

Error ครับ

Could not query forum moderator information

DEBUG MODE

SQL Error : 2013 Lost connection to MySQL server during query

SELECT aa.forum_id, g.group_id, g.group_name FROM phpbb_auth_access aa, phpbb_user_group ug, phpbb_groups g WHERE aa.auth_mod = 1 AND g.group_single_user = 0 AND g.group_type <> 2 AND ug.group_id = aa.group_id AND g.group_id = aa.group_id GROUP BY g.group_id, g.group_name, aa.forum_id ORDER BY aa.forum_id, g.group_id

Line : 242
File : index.php


My.Cnf
[mysqld]
socket=/home/virtual/FILESYSTEMTEMPLATE/.mysqlsock/mysql.sock
datadir=/var/lib/mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
# set-variable = wait_timeout=60
# set-variable = max_connections=650
old_passwords=1
# default-character-set=tis620
# safe-show-database

max_connections = 350
key_buffer = 64M
myisam_sort_buffer_size = 64M
join_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 2M
table_cache = 1800
thread_cache_size = 384
wait_timeout = 100
connect_timeout = 10
tmp_table_size = 64M
max_allowed_packet = 64M
max_connect_errors = 10
thread_concurrency = 4
query_cache_limit = 1M
query_cache_size = 64M
query_cache_type = 1
query_prealloc_size = 16384
query_alloc_block_size = 16384

[mysqldump]
quick
max_allowed_packet = 16M

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/home/virtual/FILESYSTEMTEMPLATE/.mysqlsock/mysql.sock

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 64M
sort_buffer_size = 64M
read_buffer = 16M
write_buffer = 16M

คนเข้าวันหนึ่งก็ประมาน 60,000 page views ครับ
แล้ว max_connections เซ็ตกันเท่าไหร่ครับ ถึงจะพอดี

ปัญหาทั้งหมด ที่กล่าวมา MySql version >5.0.x ไม่มีปัญหาเลยครับ
แต่จำเป็นต้องใช้ 4.1.7 ครับ ด้วยเหตุผลบางประการครับ

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 21817
Joined: 22/09/2008 6:18 pm
Contact:

Postby mindphp » 19/10/2007 8:01 am

อธิบาย มานาน ถามว่า
max_connections ?
max_connections ตามที่เค้าระบุไว้ เป็นค่า ที่เหมาะสมกับการใช้งาน ทั่วไป ก่อน ที่จะบอกได้ ว่า จะกำหนด เท่าไรนั้น ขึ้นอยู่ กับ โปรแกรมคุณครับ max_connections หมายถึง เวลานะเซี่ยว วินาทีนั้น เปิดให้ใช้งาน ได้ 8 คนพร้อมๆ กัน ในทางใช้งาน จริง วันละ 60000 view ลองคิดดู ว่ามีการเรียกใช้ ฐานข้อมูล ประมาณ ไหน
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: viewforum.php?f=29
รับอบรม และพัฒนาระบบ: viewtopic.php?f=6&t=2042

User avatar
ilovephp
PHP Newbie
PHP Newbie
Posts: 2
Joined: 01/01/1970 7:00 am

อันนั้นไม่ใช่ปัญหาหลักครับ

Postby ilovephp » 19/10/2007 4:19 pm

ขอบคุณ mindphp ครับ ที่ช่วยตอบ

อันนั้นไม่ใช่ปัญหาหลักครับ ถามต่อท้ายเฉยๆ ผมอาจจะเขียนไม่ชัดเจน
ปัญหาหลักคือข้างบนที่กล่าวมา เกี่ยวกับ TIS620 ตอน select แล้วดับไป
ต้องการการแก้โดยไม่เปลี่ยน version ของ Mysql 4.1.7, Apache/2.0.52 (Red Hat) ,PHP 4.3.9
ถ้าจะเปลี่ยน server ไม่ใช่ของผมนะครับ มันอ้างอิงกับ control panel
เปลี่ยนต้องเปลี่ยน version control panel เป้น version ใหม่ด้วย
ทาง server เขาบอกมาว่าอย่างนั้น ซึ่งมันก็แพงโขอยู่

ตอนนี้ผมกำลังแก้ด้วยการเปลี่ยน input และหน้าเว็บทั้งหมด ให้เป็น UTF-8
แล้วselect ก็ใช้ function where (`name` = CONVERT( _utf8 'ชื่อทดสอบ' USING tis620 ) COLLATE tis620_thai_ci ) อยู่ ได้ผลอย่างไรเดี๋ยวมาบอกครับ
ถ้ามีวิธีแก้แบบอื่นก็แนะนำด้วยนะครับ
-----------------------
ขอบคุณครับ
-----------------------

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 21817
Joined: 22/09/2008 6:18 pm
Contact:

Postby mindphp » 19/10/2007 5:39 pm

คิดว่า ปัญหา น่าจะมา จากตอน ติดตั้งโปรแกรม น่ะครับ ถ้าคอมไพเอง อาจไม่ได้ใส่ ส่วนของ ภาษา ไทย ลงไป
mysql 4.1 เป็น เวอร์ชั่น แรก ที่เปลี่ยน มาใช้ utf8 และ ถ้าจำไม่ผิดที่ ผมเคยอ่านผ่านๆ มารู้สึกว่า เวอร์ชั่นนั้น ตัวที่ install ไม่มีไม่ได้ ใส่ส่วนของภาษา ไทยมาด้วย(ด้วยเหตุผลว่าไม่มีใครทำภาษาไทยใส่ให้เค้า) แต่ถ้าเราจะเอามาคอมไพเอง ก็ ได้ คิดว่า host ส่วนใหญ่ ที่ใช้ 4.1 น่าจะทำวิธีนี้
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: viewforum.php?f=29
รับอบรม และพัฒนาระบบ: viewtopic.php?f=6&t=2042


Return to “Programming - PHP”

Who is online

Users browsing this forum: No registered users and 46 guests