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

时间:2018-07-23 07:01:07

标签: php mysqli joomla

我正在尝试在MySQL表中仅创建一个新行

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

我真的不明白为什么会这样。 debug_to_console(“ makepass”); -我的调试功能-仅执行一次?并且它创建的两行是不同的/副本

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 ('$2y$10$jXkjJX1OZ7Vu0okV/QlxcehF5T2SSPZFhVHIx.E64HhidgYY.3URS','juLEo','2018-07-23','0') ON DUPLICATE KEY UPDATE `licenskey_Identifier` = VALUES(`licenskey_Identifier`)

2 个答案:

答案 0 :(得分:0)

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

也许在每一行上添加一个“调试到控制台”点,例如“ here 1,here 2”。

答案 1 :(得分:0)

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