MySQL Query如果不存在则插入一行

时间:2015-07-15 17:35:24

标签: php mysql

我有一个名为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

3 个答案:

答案 0 :(得分:0)

您应该使用预准备语句来避免SQL注入(如Jay Blanchard所述)。您应该查看Sanitize Filters来过滤$_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();
}

你正在混合面向对象的语法和过程语法,我假设你正在使用对象oritented(因为这是你最常用的)。

答案 1 :(得分:0)

$insertfalse,因为给定的prepare语句中发生错误。 您可能有拼写错误,因此要验证您是否可以检查:

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

答案 2 :(得分:-1)

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