删除了原始文字
好的,所以我找到了原来的问题,这要归功于一个有用的答案。 它列出了“无效查询:未选择数据库”作为错误。
require_once ('../dir_connect.php');
$dbc = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (!$dbc) {
die('Could not connect: ' . mysql_error());
}
如果我有这个,我在dir_connect.php文件中有这个:
/** The name of the database */
define('DB_NAME', 'unlisted_employees');
/** MySQL database username */
define('DB_USER', 'unlisted_qpass');
/** MySQL database password */
define('DB_PASSWORD', 'testpass');
/** MySQL hostname */
define('DB_HOST', 'localhost');
我是否需要添加一些内容来建立实际的数据库连接?
答案 0 :(得分:4)
您需要检查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']));
然后在生成查询时不需要转义它。在生成查询时进行转义可能是更好的做法,因此很明显您没有遗漏任何内容。
EDIT2:根据文档,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());
}
(顺便说一下,你应该编辑你的问题并放回原始文本,这样以后可能对其他人有用了!)
答案 1 :(得分:0)
您应该使用类似mysql_real_escape_string(或任何适合您的数据库引擎的内容)来逃避查询中的参数。查看我链接到的文档。自从我使用PHP以来已经有一段时间了,但有人可能会使用更好的参数化转义方法。
但是,你的主要问题似乎是你在整数字段中插入字符串。检查你的zip,birthmonth,birthday,birthyear等字段的值...他们可能不需要用单引号转义。
祝你好运!答案 2 :(得分:0)
没有与数据库的连接?
mysql_query()
失败时返回false并生成警告,而不是错误。
顺便说一下,!$query
并没有告诉你任何关于mysql的事情,因为它只是一个文本字符串。
答案 3 :(得分:0)
问题在于:
if (!$query) {
die('Invalid query: ' . mysql_error());
}
您正在检查$query
变量以确定查询是否运行,这没有任何意义。相反,您需要收集mysql_query
的返回值,然后再使用它。
$res = mysql_query($query);
if (!$res) {
die('Invalid query: ' . mysql_error());
}