|
|
|
PHP+MSSQL 2012 ใช้ ODBC เพื่อ insert & query ภาษาไทยกลายเป็นภาษาต่างดาว |
|
|
|
|
|
|
|
ผมมีปัญหาเกี่ยวกับการ insert และ query ภาษาไทยบน MS SQL Server 2012 โดยใช้ odbc บน PHP แต่พอ insert ไปแล้วมันกลายเป็น ไทย ครับ แต่กลับแสดงผลเป็นภาษาไทยได้ตามปกติ แล้วในทางกลับกันถ้าผม insert ภาษาไทยตรงๆ ลงบน database โดยใช้ SQL Management Studio ด้วย INSERT INTO tablename ('Name') VALUES ('ภาษาไทย') แต่พอแสดงผลกลับกลายเป็น ??? ผมควรทำยังไงดีครับ
ขอบคุณครับ
ข้อมูลเบื้อต้น
1. MS SQL Server 2012, collate -> Thai_CI_AS
2. ในหน้าเว็บใช้ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
3. data type ของ field เป็น nvarchar
4. ตอน insert ด้วย PHP ใช้ตามด้านล่าง
Code (PHP)
$strSQL1 = "insert into tblUsers (FirstName,LastName,UserName,PassWord,Email,PhoneNumber,Misc,UserGroupId,Status,LastLoginTime) ";
$strSQL1 .= "values (N'".$_POST["txtFirstName"]."',N'".$_POST["txtLastName"]."' ,'".$_POST["txtUsername"]."','".$_POST["txtPassword"]."' ,'".$_POST["txtEmail"]."','".$_POST["txtPhoneNumber"]."',null,".$_POST["txtUserGroupId"].",1,null)";
$objQuery1 = odbc_exec($objConnect,$strSQL1);
Tag : PHP, Ms SQL Server 2012
|
ประวัติการแก้ไข 2015-03-22 20:25:52 2015-03-22 20:26:43 2015-03-23 09:59:44
|
|
|
|
|
Date :
2015-03-22 20:24:51 |
By :
snowbell |
View :
5374 |
Reply :
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใช้ NVarchar ก็น่าจะถูกแล้วครับ ว่าแต่ตอนที่ Insert แล้วข้อมูลใน Database เป็นภาษาไทยหรือเปล่าครับ
|
|
|
|
|
Date :
2015-03-23 08:44:59 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 3 เขียนโดย : Chaidhanan เมื่อวันที่ 2015-03-23 10:02:10
รายละเอียดของการตอบ ::
ไฟล์ register.php เป็นโค้ดสำหรับ insert ลงฐานข้อมูลครับ ส่วนไฟล์ query เป็น check_login.php
connectdb.php
<?php
$server = "localhost\SQLEXPRESS";
$database = "ReserveMeetingRoom";
$user = "sa";
$password = "1234567890";
date_default_timezone_set("Asia/Bangkok");
$objConnect = odbc_connect("Driver={SQL Server Native Client 11.0};Server=$server;Database=$database;Charset=UTF-8", $user, $password) or die("Error Connect to Database");
?>
register.php
<?php
include("connectdb.php");
$strSQL1 = "insert into tblUsers (FirstName,LastName,UserName,PassWord,Email,PhoneNumber,Misc,UserGroupId,Status,LastLoginTime) ";
$strSQL1 .= "values (N'".$_POST["txtFirstName"]."',N'".$_POST["txtLastName"]."','".$_POST["txtUsername"]."','".$_POST["txtPassword"]."','".$_POST["txtEmail"]."','".$_POST["txtPhoneNumber"]."',null,".$_POST["txtUserGroupId"].",1,null)";
$objQuery1 = odbc_exec($objConnect,$strSQL1);
odbc_close();
?>
<html>
<head>
<title>Register</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="shortcut icon" href="stylesheet/img/devil-icon.png"> <!--Pemanggilan gambar favicon-->
<link rel="stylesheet" type="text/css" href="mos-css/mos-style.css"> <!--pemanggilan file css-->
</head>
<body>
<form action="register.php" id="register" method="post">
<table>
<tr>
<td>First Name</td>
<td><input type="text" name="txtFirstName"></td>
</tr>
<tr>
<td>Last Name</td>
<td><input type="text" name="txtLastName"></td>
</tr>
<tr>
<td>Username</td>
<td><input type="text" name="txtUsername"></td>
</tr>
<tr>
<td>Password</td>
<td><input type="text" name="txtPassword"></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" name="txtEmail"></td>
</tr>
<tr>
<td>Phone number</td>
<td><input type="text" name="txtPhoneNumber"></td>
</tr>
<tr>
<td>User group id</td>
<td><input type="text" name="txtUserGroupId"></td>
</tr>
<tr>
<td>status</td>
<td><input type="text" name="txtStatus"></td>
</tr>
</table>
<input type="submit" value="ตกลง">
</form>
</body>
</html>
check_login.php
<?php
ob_start();
session_start();
?>
<html>
<head>
<title>Reservations Meeting</title>
<meta HTTP-EQUIV="Refresh" CONTENT="2;URL=index.php" charset="utf-8">
<link rel="shortcut icon" href="stylesheet/img/devil-icon.png"> <!--Pemanggilan gambar favicon-->
<link rel="stylesheet" type="text/css" href="mos-css/mos-style.css"> <!--pemanggilan file css-->
</head>
<body>
<div id="header">
<div class="inHeaderLogin"></div>
</div>
<div id="errorForm">
<div class="informasi" align="center">
<?php
include("connectdb.php");
$strSQL = "SELECT * FROM tblUsers WHERE UserName = '".trim($_POST['txtUsername'])."'
and PassWord = '".trim($_POST['txtPassword'])."'";
$objQuery = odbc_exec($objConnect,$strSQL);
$objResult = odbc_fetch_array($objQuery);
if(!$objResult)
{
echo "Username หรือ Password ไม่ถูกต้อง!";
}
else
{
//echo "First name = ".$objResult["FirstName"];
$_SESSION["member_id"] = $objResult["UserId"];
$_SESSION["member_user"] = $objResult["UserName"];
$_SESSION["member_pass"] = $objResult["PassWord"];
$_SESSION["member_name"] = $objResult["FirstName"]." ".$objResult["LastName"];
$_SESSION["member_group_id"] = $objResult["UserGroupId"];
$_SESSION["member_status"] = $objResult["Status"];
//$_SESSION["member_active"] = $objResult["active"];
session_write_close();
header("location:home.php");
}
mssql_close();
?>
</div>
</div>
</body>
</html>
|
ประวัติการแก้ไข 2015-03-23 10:33:27 2015-03-23 10:40:20
|
|
|
|
Date :
2015-03-23 10:32:55 |
By :
snowbell |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใน check_login.php น่าจะผิดตรงนี้นะครับ
08.<meta HTTP-EQUIV="Refresh" CONTENT="2;URL=index.php" charset="utf-8">
แก้เป็น
<meta HTTP-EQUIV="Refresh" CONTENT="2;URL=index.php" >
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
|
|
|
Date :
2015-03-23 11:17:58 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอนคิวรี่ข้องมูลออกมาเเสดงให้คอนเวิดเป็น utf-8 ผมเคยเป็นจำได้ลองใช้ คำสั่งคอนเวิดดูนะคับ
|
|
|
|
|
Date :
2015-03-24 16:01:30 |
By :
newalway |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าทุกอย่างเป็น utf-8 ทั้งหมด ไม่ต้องใช้ iconv แต่เพราะ มันไม่ใช่ utf8
ถ้าดึงมาจาก database แล้วมาแปลงเป็น utf8 นั่นก็แสดงว่าตอนนำเข้าไม่ได้ใช้ utf8
และการใช้ varbinary มาเก็บ text ก็ผิดวัตถุประสงค์อีก
ทำไมไมใช้ text หรือ ntext ในการเก็บอักษร
text สามารถเก็บ ภาษาอังกฤษ และ local language คือเก็บได้ 2 ภาษา
ส่วน ntext สามารถเก็บได้ทุกภาษาบนโลกใบนี้
ในส่วนของ HTML ถ้าประกาศ <meta charset="utf8" > ก็จะสามารถ ทำงานได้กับ ทุกภาษา แค่หา font มารองรับให้ตรงเท่านั้น
และในกรณีที่มี hardcode ที่ไม่ใช่ภาษาอังกฤษ ต้องแน่ใจว่า file type เป็น unicode (utf8 without bomb)
|
|
|
|
|
Date :
2018-09-13 22:30:34 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|