【问题标题】:Loop into a PDO request to check if variable exists?循环进入 PDO 请求以检查变量是否存在?
【发布时间】:2015-02-20 15:57:57
【问题描述】:

我想循环到 DB 以检查变量是否存在,然后当它不存在时,我将 INSERT 插入 DB。例如:

$i = 1;
$string = $_POST['name'];
$req = $pdo->prepare('SELECT name FROM users WHERE name = ?');
$req->execute(array($string));
while($req->rowCount() > 0) {
    $name = $string . '-' . $i;
    // HERE IN NEED TO TEST THE EXISTENCE OF THE VAR ($name) INTO DB, BUT HOW?
    $i++
}
if ($name) {
    $string = $name;
}
$req = $pdo->prepare('INSERT INTO users (name) VALUES (?)');
$req->execute(array($string));
$req->closeCursor();

【问题讨论】:

  • INSERT ... ON DUPLICATE KEY UPDATE
  • ON DUPLICATE KEY UPDATE 仅适用于整数,对吗?我的问题是基于一个字符串。
  • @XavierC.:linkname 的意义是什么。我没有看到您在插入中为link 设置值,那么它是如何进入数据的?整个过程闻起来非常糟糕,正确的做法是修改表结构和逻辑,但我不了解数据或其用法,所以我无法提出建议。此外,第谷很棒;-)
  • @prodigitalson :抱歉我的错误,我刚刚更新了代码:它是“名称”,而不是“链接”。是的,第谷很棒! ;-)
  • @XavierC.:好吧,那你为什么还需要在name 中添加一个序列号... 为什么不直接使用AUTO_INCREMENT 主键并继续插入名称?

标签: php mysql database pdo


【解决方案1】:

我终于找到办法了:

function profileLink(PDO $pdo, $string, $i=0)
{
    if ($i!=0) {
        $link = $string . '-' . $i;
    } else {
        $link = $string;
    }
    $req = $pdo->prepare('SELECT link FROM users WHERE link = ?');
    $req->execute(array($link));
    $nb = $req->rowCount();
    $req->closeCursor();
    if ($nb > 0) {
        $i++;
        return profileLink($pdo, $string, $i);
    } else {
        return $link;
    }
}
$link = profileLink($pdo, $link);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2011-01-21
    相关资源
    最近更新 更多