MySQL查询插入不存在的行


MySQL Query insert a row if it doesn't exist

我有一个名为People的表,每一行都有一个名称结构,其他行如age等…
无论如何,我想检查具有特定名称的行是否已经存在以插入新行。
这是我目前所做的:

$name = $_GET["name"];
$age = $_GET["age"];
$location = $_GET["location"];
$query = $connection->query("SELECT * FROM people WHERE name='" . $name . "'");
$exist = mysqli_num_rows($query);
if ($exist > 0) {
    //exist
    $connection->query("INSERT INTO people (name,age,location) VALUES ($name, $age, $location)");
} else {
    //doesn't exist
}

但是它不起作用,是因为INSERT不应该这样执行吗?我真的不知道,无论如何,提前谢谢。编辑:
搜索后,我只得到以下不工作:

$prepare = $connection->prepare("SELECT * FROM people WHERE name = ?");
$prepare->bind_param("s", $name);
$prepare->execute();
$result = $prepare->get_result();
$numRows = $result->num_rows;
    if ($numRows <= 0) {
      $insert = $connection->prepare("INSERT INTO people (name, age, location) VALUES (?,?,?)");
      $insert->bind_param("sis", $name, $age, $loc);
      $insert->execute();
      echo "true," . $title;
} else {
  echo "false," . $title;
}

但是它给了我这个错误:

Fatal error: Call to a member function bind_param() on a non-object in C********* on line 19

$insertfalse,因为在给定的prepare语句中发生了错误。您可能有一个错别字,因此您可以检查:

if (!$insert) {
    echo $connection->error;
}

应该使用准备好的语句来避免sql注入(正如Jay Blanchard所提到的)。您应该查看消毒过滤器来过滤您的$_POST变量。

如果您希望在数据库中有唯一的名称,您可以在数据库中使用unique键,或者通过编码:

$result = $mysqli->query("SELECT * FROM people WHERE name='$name'");
if ($result->num_rows > 0) {
    // If results, the name exists
    echo "Someone with the name $name are already in our database!";
} else {
    // Else we insert it!
    $stmt = $mysqli->prepare("INSERT INTO people (name,age,location) VALUES (?, ?, ?)");
    $stmt->bind_param('sis', $name, $age, $location);
    $stmt->execute();
}

你混合了面向对象的语法和过程语法,我假设你使用的是面向对象的(因为这是你最擅长的)。

如果你尝试插入一个新记录或更新一个插入记录,花一些时间阅读/理解mysql提供的语法。你可以在这里阅读http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html