WHERE '账户'='中文'//查询中文字报错,数字字母都能正常查询
【账户】是字段名,应使用反引号:
`账户`
【中文】是常量,单双引号都可以,但是要注意你现在的语句是在单引号里面,因此应该转义或者使用双引号,这部分可以修改为:
WHERE 账户="中文"'
另外,如果只是查询中文内容才报错,可能你粘贴代码和原始代码有区别,原始代码没有把字段名放在单引号里面,否则是查不到内容的。查询中文内容报错,一般是中文的编码和网页文件的编码、以及数据库的编码不一致,你这来数据库是UTF8,那么PHP脚本文件、浏览器网页都必须使用UTF-8
试试我的代码<?PHP
/*
创建ADO连接
*/
$conn = @new COM("ADODB.Connection") or die ("ADO Connection faild.")
$connstr = "DRIVER={Microsoft Access Driver (*.mdb)}DBQ=" . realpath("Database1.accdb")
$conn->Open($connstr)
/*
创建记录集查询
*/
$rs = @new COM("ADODB.RecordSet")
$rs->Open("select * from dbo_dirs",$conn,1,3)
/*
循环读取数据
*/
while(!$rs->eof){
echo $rs->Fields["title"]->Value
echo "<br/>"
$rs->Movenext()//将记录集指针下移
}
$rs->close()
?>
错误抑制符去掉错误信息,eval和echo一样并不是函数,不能使用变量函数的方法调用比如:$func = ‘eval’$func()这样的调用就是无效的。它会提示没有eval函数,如果你自己定义这么一个函数也是有问错误抑制符去掉错误信息,eval和echo一样并不是函数,不能使用变量函数的方法调用比如:
$func = ‘eval’
$func()这样的调用就是无效的。它会提示没有eval函数,如果你自己定义这么一个函数也是有问题的。因为eval是一个关键字。
eval调用和include差不多,如果被包含文件中没有明确return就返回null。如果直接eval我们需要检查的文件会造成被检查的文件内代码被执行,这可不是我们想要的,我们只需要检查一下这个文件的语法是否正确。 我们可以在要检查的文件之前添加return 语句,让代码提前跳出,那么后面的代码就不会执行了。好的,就这么干。代码如下:
<?PHP
if(!function_exists('PHP_check_syntax')) {
function PHP_check_syntax($file_name,
&$error_message = null) {
$file_content = file_get_contents($file_name)
$check_code = "return true?>"
$file_content = $check_code .
$file_content . "<?PHP "
if(!@eval($file_content)) {
$error_message = "file: " .
realpath($file_name) . " have syntax error"
return false
}
return true
}
}
if(!PHP_check_syntax("file.PHP", $msg)) {
echo $msg
}
else {
echo "Woohoo, OK!"
}
<?PHP
foreach:: a =>b
?>
因为Parse error 是没法被 set_error_handler处理函数处理的。这个异常没办法catch到。所以才使用了@来抑制错误。这带来的问题就是我们无法得到详细的错误信息。 不过目前我需要的功能也只是检查语法是否正确。不正确的话重新编译模板文件,就这么简单,至于语法错误,在显示网页的时候自然会看得到。
PHP检查语法错误最好的办法就是这个被遗弃的PHP_check_syntax这个方法回到PHP中。下次再研究下他们是出于什么原因把这个函数去掉的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)