0

我有一个 mysql 数据库设置。其中一个名为 users 的表有一些列,其中 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,则与您的数据类型不匹配。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 回答