データベースクエリの難解な問題を詳しく解説!
ソース コード:
PHP コード
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
$sql="select * from tb_user where nicheng='".$uname."'";
$re=mysql_query($sql,$conn);
//echo $sql;
//exit();
$info=mysql_fetch_array($re);
if($info==true)
{
echo "<script>alert('该昵称已经存在!');history.back();</script>";
exit;
}
テスト時には常にエラーが発生し、プロンプト:
警告: mysql_fetch_array(): 指定された引数は有効な MySQL 結果ではありません (エラーは " $info=mysql_fetch_array($re);" にあります
SQL ステートメントにはエラーはなく、エコー出力を使用して mysql で実行されました! 条件を設定したときにもそれがわかりました値が数値であるフィールド (例: "where id='".$uname."'";" または "where id='".$uname."'";") への関数は、値が次の場合に正常に実行されます。条件フィールドが中国語 (niche、xingming、xingbie など) の場合、実行時に上記のエラーが報告されます。
エンコードの問題だと思いますが、echo 出力を使用したところ、中国語の表示は正常です。
データベースは次のとおりです:
id xingming xingbie biji ruxue banji mima ip shijian nicheng
1 張三南中学校 2011 05 2134 NULL NULL 小三
構造は次のとおりです:
id int(11) いいえ auto_increment
xingming varchar(8) utf8_bin は NULL
xingbie varchar(2) gb2312_chinese_ci は NULL
buji varchar(4) gb2312_chinese_ci は NULL
ruxue varchar(4) gb2312_chinese_ci is NULL
banji varchar(2) gb2312_chinese_ci is NULL
mima varchar(50) gb2312_chinese_ci is NULL
ip varchar(15) gb2312_chinese_ci is NULL
shijian datetime is NULL
nicheng varchar(25) utf8_bin いいえ
-----解決策---------エコーしてもらえますか$uname の値を確認するには?
------解決策---------ページのエンコーディングは何ですか?
------解決策------------------投稿者はニックネームの重複を判断する必要があります。
代わりにこれを試してみましょう
$sql="select * from tb_user where nicheng='".$uname."'";
$result=mysql_query($sql);
if (mysql_num_rows($result)>0){
echo "ニックネームはすでに存在します";
}
else {
//データを挿入
}
エンコーディングの問題だと考えられます。リンクされたデータベースに同様のステートメントがあるかどうかを確認してください
mysql_query('set names utf8');
------解決策------------------
$re=mysql_query($sql,$conn) または die(mysql_error()); // このように報告されるエラーは何ですか?
------解決策----------------------データベースはどのようなエンコーディングを使用していますか?
次の文を追加してみてください
mysql_set_charset("データベースで使用されるエンコーディング");