【问题标题】:MySql Query - Check for data if it is exist, if yes get the id, if not, add the data and get the idMySql 查询 - 检查数据是否存在,如果存在则获取 id,如果不存在,则添加数据并获取 id
【发布时间】:2015-01-31 07:08:57
【问题描述】:

我可以用 php/mysqli 多步骤来做到这一点。

所以,表格只有两列。
身份证、姓名

两者都是独一无二的。
我想检查名称是否在数据库中可用,如果可用则获取 ID。
如果不可用,则在数据库中添加 Name 并获取 ID。

我可以使用需要多个 sql 查询的 php/mysql 来完成。
有没有办法(检查数据库,如果不存在添加它并获取 ID)仅使用一个 mysql 查询并获取 ID?

提前致谢!

我的代码(MySQLi 程序)

function abc($name) {
    global $conn;
    $checkName = mysqli_query($con,"SELECT * FROM category WHERE name=".mysql_real_escape_string($name));
    if (mysqli_num_rows($checkName) > 0) {
        $inputName = mysqli_query($con,"INSERT INTO category (name) VALUES ('".mysql_real_escape_string($name)."')");
        if (!$inputName) { die(mysqli_error($conn)); }
        $checkName2 = mysqli_query($con,"SELECT * FROM category WHERE name=".mysql_real_escape_string($name));
        while($blahblah = mysqli_fetch_assoc($checkName2)) {
            $returnData[] = $blahblah;
        }
    } else {
        while($blahblah = mysqli_fetch_assoc($checkName)) {
            $returnData[] = $blahblah;
        }
    }
    return $blahblah;
}

【问题讨论】:

  • 您可以为名称字段添加唯一索引并在更新时插入
  • 请向我们展示您到目前为止尝试过的代码
  • 在php中勾选后再添加
  • 因为你使用mysqli_函数,你应该使用mysqli_real_escape_string()来转义输入参数,而不是mysql_real_escape_string()。或者,您可以使用准备好的语句。

标签: php mysql mysqli


【解决方案1】:

只需一行即可完成。使用“INSERT IGNORE INTO..”或“REPLACE INTO....”。 This页面引用。

【讨论】:

  • REPLACE INTO 删除现有记录。这也意味着对该记录的 id 的任何引用都不再起作用(或者,如果使用了外键,删除将失败甚至可能级联)。
【解决方案2】:

如果您使用面向对象的 MySQLi,您可以这样做:

$mysqli = new mysqli(...);
$name = "Something";

$query = $mysqli->prepare("SELECT id, name FROM table WHERE name=?");
$query->bind_param('s', $something);
$query->execute();
$query->bind_result($id, $name);
$query->store_result();
if($query->num_rows == 1) {
    return $id;
} else {
    $queryTwo = $this->mysqli->prepare("INSERT INTO table VALUES('', ?);");
    $queryTwo->bind_param('s', $name);
    $queryTwo->execute();
    $queryTwo->close();

    $queryThree = $this->mysqli->prepare("SELECT id FROM table WHERE name=?");
    $queryThree->bind_param('s', $name);
    $queryThree->execute();
    $queryThree->bind_result($id);
    $queryThree->store_result();
    while($queryThree->fetch()) {
        return $id;
    }
    $queryThree->free_result();
    $queryThree->close();
}
$query->free_result();
$query->close();

【讨论】:

  • 感谢您的回复。我可以通过多个查询来做到这一点。只是检查是否有任何方法可以在一个查询中完成。 :)
猜你喜欢
  • 2014-04-28
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 2016-11-05
  • 2011-05-16
相关资源
最近更新 更多