通过php插入mysql数据库总会导致崩溃

时间:2013-03-16 05:42:29

标签: php mysql database

我已经设置了my_sql数据库。其中一个名为users的表有一些列,其中2列是usr(varchar 32)和email(varchar 255)。每当我尝试通过PHP将数据插入到这两个列(或任何其他列)中时,表就会崩溃。

这是检查表

的分析
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 个答案:

答案 0 :(得分:3)

在查询后运行die()并查看mysql错误是什么,如果是mysql问题:

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

错误应该指向你的问题。

答案 1 :(得分:2)

改善mavili的答案,我认为最好这样做:

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

error_log可以更安全的方式写入信息。有关详细信息,请参阅the manual for error_log

答案 2 :(得分:1)

mysql_real_escape_string()会返回转义字符串,或者FALSE出错。如果它返回FALSE,则它与您的varchar数据类型不匹配。有两点

在使用mysql_real_escape_string()之前需要MySQL连接,否则会生成级别为E_WARNING的错误,并返回FALSE。

必须在服务器级别或使用API​​函数mysql_set_charset()设置字符集,才能影响mysql_real_escape_string()

答案 3 :(得分:0)

我刚重新安装了WAMP,它开始工作了。谢谢你的帮助!