1046:没有选择数据库?

时间:2013-05-14 09:31:25

标签: php mysql sql mysqli

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

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

?>

5 个答案:

答案 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

中将数据库名称作为4参数传递
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);