我有一个名为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
答案 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)
$insert
为false
,因为给定的prepare语句中发生错误。
您可能有拼写错误,因此要验证您是否可以检查:
if (!$insert) {
echo $connection->error;
}
答案 2 :(得分:-1)
如果您尝试插入新记录或更新插入记录,请花一些时间阅读/理解mysql提供的语法...您可以在此处阅读http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html