0

my_sqlデータベースを設定しました。usersと呼ばれるテーブルの1つにはいくつかの列があり、そのうちの2つはusr(varchar 32)とemail(varchar 255)です。PHPを介してこのテーブルのこれらの2つの列(または他の列)にデータを挿入しようとすると、テーブルがクラッシュします。

これはチェックテーブルからの分析です

mysql> check table users;
+----------------+-------+----------+-------------------------------------------     +
| Table          | Op    | Msg_type | Msg_text                                       |
+----------------+-------+----------+-------------------------------------------     +
| accounts.users | check | warning  | Table is marked as crashed                     |
| accounts.users | check | error    | Size of indexfile is: 4096    Should be: 10240 |
| accounts.users | check | error    | Size of datafile is: 0        Should be: 28    |
| accounts.users | check | error    | Corrupt                                        |
+----------------+-------+----------+-------------------------------------------     +
4 rows in set (0.00 sec)

これはPHPコマンドです:

$type     = 'testing';
$type     = mysql_real_escape_string($type);
mysql_query("INSERT INTO users(usr,email) VALUES('$type','$type')");

コマンドラインからデータベースに挿入しようとしても、テーブルがクラッシュしません。

なぜこれが起こっているのか私は困惑しています。

4

4 に答える 4

3

クエリの後にdie()を実行し、mysqlの問題である場合は、mysqlエラーが何であるかを確認します。

mysql_query(' ... ') or die(mysql_error());

エラーはあなたにあなたの問題を示しているはずです。

于 2013-03-16T05:51:34.003 に答える
2

maviliの答えを改善するために、次のことを行う方が良いと思います。

if(!mysql_query($SQL)) {
    error_log(mysql_error());
}

error_logは、より安全な方法で情報を書き込むことができます。詳細については、error_logのマニュアルを参照してください

于 2013-03-16T06:16:11.713 に答える
1

mysql_real_escape_string()エスケープされた文字列を返すかFALSE、エラーの場合。が返される場合は、データ型FALSEと一致しません。2つのポイントがあります。varchar

使用する前にMySQL接続が必要ですmysql_real_escape_string()。そうでない場合、レベルE_WARNINGのエラーが生成され、FALSEが返されます。

文字セットは、サーバーレベルで設定するか、API関数mysql_set_charset()を使用して設定する必要があります。mysql_real_escape_string()

于 2013-03-16T07:07:11.883 に答える
0

WAMPを再インストールしたところ、動作し始めました。助けてくれてありがとう!

于 2013-05-02T00:10:28.760 に答える