您需要检查mysql_query()调用的返回值。
http://php.net/manual/en/function.mysql-query.php
$result = mysql_query($query);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
现在,你永远不会真正击中了错误条件并不会真正看到什么(如果有的话)的错误是,MySQL正在发回给你。
另外,您可能想要转义您插入查询的值,而不是仅执行正常字符串连接。如果你不这样做,你的应用程序可能容易受到SQL注入攻击。这里是如何安全地生成查询:
$query = sprintf("INSERT INTO staff (name, lastname, username, password, position, department, birthmonth, birthday, birthyear, location, phone, email, street, city, state, country, zip, tags, photo) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",
mysql_real_escape_string($name),
mysql_real_escape_string($lastname),
mysql_real_escape_string($username),
mysql_real_escape_string($password),
mysql_real_escape_string($position),
mysql_real_escape_string($department),
mysql_real_escape_string($birthmonth),
mysql_real_escape_string($birthday),
mysql_real_escape_string($birthyear),
mysql_real_escape_string($location),
mysql_real_escape_string($phone),
mysql_real_escape_string($email),
mysql_real_escape_string($street),
mysql_real_escape_string($city),
mysql_real_escape_string($state),
mysql_real_escape_string($country),
mysql_real_escape_string($zip),
mysql_real_escape_string($tags),
mysql_real_escape_string($photo));
编辑:刚刚看到您的评论到另一个答案。如果您已经在进行转义,如:
$birthday = mysql_real_escape_string(trim($_POST['birthday']));
那么您在生成查询时不需要转义它。在生成查询时进行转义可能是更好的做法,因此显然你不会错过任何东西。
编辑2:根据文档,mysql_connect()应该接受主机,用户和密码,然后您需要执行mysql_select_db()调用以选择正确的数据库。
http://www.php.net/manual/en/function.mysql-select-db.php
$dbc = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$dbc) {
die('Could not connect: ' . mysql_error());
}
// make foo the current db
$db_selected = mysql_select_db(DB_NAME, $dbc);
if (!$db_selected) {
die ('Could not select database: ' . mysql_error());
}
(顺便说一句,你应该修改你的问题,并放回原来的文本,所以可能是其他后来发现这个话题有用!)
您错过了参数化查询,有一件事... – Aaronaught 2010-03-23 01:56:21