我遇到了问题。下面的代码,我清楚地选择了一个数据库,但它仍然给我一个错误,说明我没有。谁能让我知道我做错了什么?
<?php
$nc = mysqli_connect("localhost", "264191", "adhiambo95");
if (mysqli_connect_errno())
{
echo "Sorry I couldn't connect to mysql: " . mysqli_connect_error();
}
mysqli_select_db($sc, "264191");
$sis = "INSERT INTO nogata_keywords ('keyword')
VALUE ('.$_GET[keyword]')";
if (!mysqli_query($nc,$sis))
{
die('Error: ' . mysqli_error($nc));
}
else
{
echo "This keyword has been added to the database.";
}
?>
答案 0 :(得分:4)
您在这里错误拼写了连接资源变量:
mysqli_select_db($sc, "264191");
应该是
mysqli_select_db($nc, "264191");
mysqli_connect
还允许您将数据库指定为第4个参数,使上述行变得多余:
$nc = mysqli_connect("localhost", "264191", "adhiambo95", "264191");
尝试一下。
还有一件事,首先由Yogesh Suthar指出,你的SQL查询是错误的,你有一段时间你不应该:
$sis = "INSERT INTO nogata_keywords ('keyword') VALUE ('.$_GET[keyword]')";
应该是
$sis = "INSERT INTO nogata_keywords (`keyword`) VALUE ('".$nc->real_escape_string($_GET['keyword'])."')";
因为您在单引号中引用了字段名称而未转义要插入数据库的值。即如果关键字是O'Neil,这将使SQL无效。
考虑切换为使用prepare()
和bind()
来避免此问题。
你还应该在$ _GET数组的索引中使用'keyword'而不仅仅是关键字,它实际上是一个常量。 http://php.net/manual/en/language.types.array.php
答案 1 :(得分:3)
你使用错误的连接变量$ sc它应该是$ nc
mysqli_select_db($nc, "264191");
假设“264191”是您的数据库名称。
答案 2 :(得分:1)
$sis
发生错误。无论如何,您可能需要检查数据库是否确实存在?并且您拥有访问它的适当权限
答案 3 :(得分:0)
您还可以在mysqli_connect
mysqli_connect("localhost", "264191", "adhiambo95","264191");
也是这个
$sis = "INSERT INTO nogata_keywords ('keyword')
VALUE ('.$_GET[keyword]')";
^^
修改强>
应该是
$sis = "INSERT INTO nogata_keywords (`keyword`)
VALUE ('$_GET[keyword]')";
您在'
周围使用了keyword
,您必须在列名周围使用`
答案 4 :(得分:0)
只是为了记录,一个正确的版本,修复了许多错误
<?php
$mysqli = mysqli_connect("localhost", "264191", "adhiambo95", "264191");
if (!$mysqli)
{
trigger_error(mysqli_connect_error());
}
$sql = "INSERT INTO nogata_keywords (keyword) VALUE (?)";
$stm = $mysqli->prepare($sql) or trigger_error($mysqli->error);
$stm->bindParam("s",$_GET['keyword']) or trigger_error($mysqli->error);
$stm->execute() or trigger_error($mysqli->error);