解决MySQL和PHP问题的几点总结

1. PHP函数传递引用参数的定义:

function test($in, &$out) {
$out = $in * 100;
return $in % 10;
}

2. 时间格式

MySQL定义datetime类型的数据段,PHP可以使用date("Y-m-d H:i:s")获得当前时间赋值给该字段:

//date字段是datetime类型
$strSQL = "insert into test(date) values('" . date("Y-m-d H:i:s") . "')";
$availableDate = date("Y-m-d H:i:s", strtotime("-30 minute")); // 时间计算:半小时前

3. 编码问题
对于在HTML脚本中没有通过:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

这样的代码定义编码的PHP文件,使用以下的PHP代码来指定:

header('Content-Type:text/html;charset=utf-8');

如果使用UTF-8编码则需要把所有的文件保存成UTF-8格式。

在Dreamweaver中编辑utf-8文件时,如果文件中没有汉字在开打时会自动转成系统默认的编码比如gb2312,解决办法是在文件任意加上一行带有汉字的注释(比如“//编码:utf-8”),然后把编码转为utf-8再保存。

4. 解决AJAX中文乱码的问题
首先建议MySQL数据库的编码最好与页面的编码一致,这样可以省去了繁锁的转码步骤。这里主要谈编码一致时乱码问题的解决。

MySQL数据库是utf-8编码,则页面也使用上面第3步的方法将编码设成utf-8,然后在PHP文件头调用MySQL函数之前设定一下编码:

mysql_query('set names utf-8', $dbConn);

这样使用常规方式通过get或post提交请求时编码都正常,而如果使用ajax提交请求时会出现乱码。

我这里只用到过ajax的get方式,解决办法是对可能是中文的参数使用encodeURIComponent()转码:

function checkUsername(pObj)
{
if (m_processing || pObj.value.length == 0)
{
return;
}
m_processing = true;
var _url = "cmd.php?cmd=check&username=" + encodeURIComponent(pObj.value) + "&userkey=" + encodeURIComponent(document.getElementById("userkey").value);
var _myAjax = new Ajax.Request(
_url,
{
method: 'get',
onComplete: checkResponse
}
)
}
function checkResponse(originalRequest)
{
$("ajax_check").innerHTML = originalRequest.responseText;
m_processing = false;
}

5. 如果以utf-8编码发邮件且主题包含汉字会在接收时有时显示乱码,解决办法
对subject进行base64编码:

$subject = "=?UTF-8?B?" . base64_encode($subject) . "?=";

6. PHP生成文件并下载

$strContent = "这里生成文件内容";
$file_size = strlen($strContent); // 取得内容长度
header("Content-type:application/octet-stream;charset=utf-8");
header("Expires: 0");
header("Pragma: cache");
header("Accept-Ranges: bytes");
header("Accept-Length: $file_size");
header("Content-Disposition:attachment; filename=Filename.ext"); // Filename.ext是下载时的默认文件名
echo $strContent;

Tags: , ,

Leave a Reply


提醒: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。