-1

我有问题。下面的代码,我清楚地选择了一个数据库,但是它仍然给我一个错误,说明我没有。谁能让我知道我做错了什么?

<?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.";
}

?>
4

5 回答 5

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 数组的索引中使用“关键字”,而不仅仅是关键字,它实际上是一个常量。http://php.net/manual/en/language.types.array.php

于 2013-05-14T09:33:14.020 回答
3

您使用了错误的连接变量 $sc 它应该是 $nc

mysqli_select_db($nc, "264191");

假设“264191”是您的数据库名称。

于 2013-05-14T09:33:11.140 回答
1

您在 处有错误$sis。无论如何,您可能需要检查数据库是否真的存在?并且您拥有访问它的适当权限

于 2013-05-14T09:33:36.910 回答
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);
于 2013-05-14T10:05:36.370 回答
0

您还可以将数据库名称作为 4 参数传递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]')";

你使用'around keyword,你必须使用`around 列名

于 2013-05-14T09:36:08.530 回答