我已经设置了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')");
每当我尝试从命令行插入数据库时,表都不会崩溃。
我很难过为什么会这样。
答案 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,它开始工作了。谢谢你的帮助!