看起来我正好连接到服务器。运行查询时似乎发生了这个问题。它一直在说
查询数据库时出错
这是我的代码:
<?php
$dbc = mysqli_connect('localhost', 'elvis_store')
or die('Error connecting to MySQL server.');
$first_name = $_POST['firstname'];
$last_name = $_POST['lastname'];
$email = $_POST['email'];
$query = "INSERT INTO email_list (first_name, last_name, email)" .
"VALUES ('$first_name', '$last_name', '$email')";
mysqli_query($dbc, $query)
or die('Error querying database.');
echo 'Customer added.';
mysqli_close($dbc);
?>
答案 0 :(得分:2)
您收到此错误,因为在您的MySQLi连接中,您只提供位置和用户名。您没有提供要使用的数据库名称。如果您没有密码,则需要按如下方式编写连接:
$dbc = mysqli_connect('localhost', 'elvis_store', NULL, 'dbName)
或
$dbc = mysqli_connect('localhost', 'dbUsername', NULL, 'elvis_store')
如果&#34; elvis_store&#34;是数据库名称而不是用户名。请记住,mysqli连接是:mysqli_connect(dbLocation, dbUsername, dbPassword, dbName)
。
另外,正如Ed在另一个答案中指出的那样,MySQL语句中也存在语法错误。以下是Ed的回答:
$query = "INSERT INTO email_list (first_name, last_name, email) " . "VALUES ('$first_name', '$last_name', '$email')";
答案 1 :(得分:0)
你有很多问题。
您的查询有拼写错误(缺少空格)。您的查询代码
$query = "INSERT INTO email_list (first_name, last_name, email)" .
"VALUES ('$first_name', '$last_name', '$email')";
生成此查询:
INSERT INTO email_list (first_name, last_name, email)VALUES ('$first_name', '$last_name', '$email')
-- ^ syntax error, missing space
要解决此问题,请将代码更改为:
$query = "INSERT INTO email_list (first_name, last_name, email) " .
"VALUES ('$first_name', '$last_name', '$email')";
至少出于测试目的,您可能应该查看mysqli_error()
的输出,而不是使用Error querying database
之类的通用消息。即使在生产中,您也希望以某种方式陷入并记录真实的错误 。
编辑:我在第一眼看到您的问题时错过了这个,但正如Stephen Cioffi指出的那样,您还需要在运行查询之前选择一个数据库。您可以使用mysqli_connect()
的架构参数或使用mysqli_db_select()
。
这两个问题 - 错字和选择数据库的失败 - 都会导致问题;你必须解决这两个问题。
这不是答案的严格部分,但重要的是。您对SQL injection持开放态度。您需要使用预准备语句。否则,你将被黑客入侵。想象一下,POST firstname
就是这样:
', (SELECT CONCAT(username, ',', password) FROM users WHERE is_admin = 1), 'eviluser@example.com') --
您的查询变为(带有一些添加的格式):
INSERT INTO email_list (first_name, last_name, email)
VALUES ('',
(SELECT CONCAT(username, ',', password) FROM users WHERE is_admin = 1),
'eviluser@example.com'
) -- ', 'value of lastname', 'value of email')
然后,当您向用户发送电子邮件时,有人会收到一封收件人的电子邮件,如
"Duke,mySup3rP@ssw0rd!" <eviluser@example.com>
而且......你被软管了。
(希望你正在腌制和散列密码,但这仍然是灾难性的。)你必须使用准备好的陈述。