代码创建两个 MySQL 行而不是一个

Code creates two MySQL rows instead of one

我正在尝试在 MySQL table

中仅创建一个新行

问题是我的数据库中有两个新行。

我真的不明白为什么会这样。 debug_to_console( "makepass" ); - 我的调试函数 - 只执行一次?并且它创建的两行不是 identical/copies

debug_to_console( "makepass" );

$salt = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$len = strlen($salt);
$makepassJBH = '';
for ($i = 57; $i < $len; $i ++) {
        $makepassJBH .= $salt[mt_rand(0, $len -1)];
}
$newpassJBH = password_hash($makepassJBH, PASSWORD_BCRYPT );            

$licensidentifierJBH = '';
for ($i = 57; $i < $len; $i ++) {
        $licensidentifierJBH .= $salt[mt_rand(0, $len -1)];
}
$fullkey = $makepassJBH . $licensidentifierJBH;


try {           
    // Get a db connection.
    $db = JFactory::getDbo();

    // Create a new query object.
    $query = $db->getQuery(true);

    // Insert columns.
    $columns = array('licenskey','licenskey_Identifier','dateCreated', 'printed');

    // Insert values.
    $values = array($db->quote($newpassJBH), $db->quote($licensidentifierJBH), $db->quote(date("Y-m-d")), $db->quote(0));

    // Prepare the insert query.
    $query
        ->insert($db->quoteName('#__licenskey'))
        ->columns($db->quoteName($columns))
        ->values(implode(',', $values));

    $query .= ' ON DUPLICATE KEY UPDATE ' . $db->quoteName('licenskey_Identifier') . ' = VALUES(' . $db->quoteName('licenskey_Identifier') . ')';
    // Set the query using our newly populated query object and execute it.
    $db->setQuery($query);
    echo $db->replacePrefix((string) $query);
    $db->execute();
}

SQL 转储:

INSERT INTO `mdh_licenskey` (`licenskey`,`licenskey_Identifier`,`dateCreated`,`printed`) VALUES ('y$jXkjJX1OZ7Vu0okV/QlxcehF5T2SSPZFhVHIx.E64HhidgYY.3URS','juLEo','2018-07-23','0') ON DUPLICATE KEY UPDATE `licenskey_Identifier` = VALUES(`licenskey_Identifier`)

确保您的脚本没有被执行两次。例如,我在使用 firebug 时遇到了这个问题。这个插件让我的页面执行了两次但没有输出到控制台。 有点像显示前的页面 "prefetch",不确定。

也许每行加一个'debug to console'点,比如'here 1, here 2'..

由于许可证密钥是由上面的 PHP 代码生成的,因此该代码必须执行两次。发生这种情况的原因有多种,但我们可能很难准确猜出原因。检查您的浏览器是否调用了两次,或者是否从 PHP 代码中调用了两次。