-1

好的,我现在有另一个问题。这应该将序列号放入 mysql 数据库,但它只放入序列号的第一个字母。如何让它写整个字符串?

    $str = '';
    for($i = 0; $i < 20; $i++)
    {
        if($letter_OR_number = rand(0,1))
        { // true: alphabet chosen
            $str[] = chr(rand(65, 90));
        }
        else
        { // false: number chosen
            $str[] = rand(0,9);
        }
        if($i % 4 == 3)
        {
            ($i < 19)? $str[] = '-': $str[] = ' ';
        }
    }
        $Query = "INSERT INTO `Donates` (`serial`, `Coins`) VALUES ('%s', '500')";
        mysql_query(vsprintf($Query, $str),$link) or die(mysql_error());
    foreach($str as $val){
        echo $val;
    }


    mysql_close($link);
    ?>
4

3 回答 3

1

不知道您的代码实际上打算做什么,

if($letter_OR_number = rand(0,1))

应该

if($letter_OR_number == rand(0,1))

$TestData[] = array($val);

您创建一个数组数组,因此

$TestData[] = $val;

可能是你想要的...

于 2013-06-30T07:46:27.477 回答
0

您要做的是通过创建四个一组的字母和数字的混合来为您的硬币创建 20 个字符的唯一标识符。

PHP 和 MySQL 都提供了一个生成随机字符串的函数,尽管略有不同。这样的字符串通常称为UUID(通用唯一标识符)。这实际上是一个标准,因为这是许多系统的要求。

PHP 函数uniqid()将生成一个 13 或 23 个字符的随机字符串;基于时间戳。这是一个示例运行:

print uniqid();  # 151cfeeba8b833
print uniqid('', true); # 51cfeeba8b83f6.48956452

现在,这并没有给出您正在寻找的格式的数字。但是,手册页上有一条注释,它提供了一个方便的功能:

function v4() {
    return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',

      // 32 bits for "time_low"
      mt_rand(0, 0xffff), mt_rand(0, 0xffff),

      // 16 bits for "time_mid"
      mt_rand(0, 0xffff),

      // 16 bits for "time_hi_and_version",
      // four most significant bits holds version number 4
      mt_rand(0, 0x0fff) | 0x4000,

      // 16 bits, 8 bits for "clk_seq_hi_res",
      // 8 bits for "clk_seq_low",
      // two most significant bits holds zero and one for variant DCE1.1
      mt_rand(0, 0x3fff) | 0x8000,

      // 48 bits for "node"
      mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
    );
}

这被称为 v4,因为它是 UUID 规范的“版本 4”。这是该函数的示例字符串edd08995-9d48-4e04-8e42-5270377c331f

MySQL 有一个内置的uuid 函数,它做同样的事情:

mysql> SELECT UUID();
        -> '6ccd780c-baba-1026-9564-0040f4311e29'

您可以使用它来简化代码,然后您所拥有的就是:

<?php

  $q = "INSERT INTO `Donates` (`serial`, `Coins`) VALUES (UUID(), '500')";
  mysql_query($q, $link) or die(mysql_error());

?>

您应该使用这些mysqli_*函数,因为旧的 mysql 函数将从 PHP 中删除。有关使用哪个 API 的讨论,请参阅手册中的此页面。

这是您的示例mysqli

<?php

    $mysqli = new mysqli("localhost", "user", "password", "database");
    if ($mysqli->connect_errno) {
        echo "Error: (".$mysqli->connect_errno.") ".$mysqli->connect_error;
    }

    $q = "INSERT INTO `Donates` (`serial`, `Coins`) VALUES (UUID(), '500')";
    $result = $mysqli->query($q);
    if (!$result) {
        echo "Error: ".$mysqli->error;
    }
?>
于 2013-06-30T08:54:55.793 回答
0

为什么要创建 2 个数组,而最终您只需要一个字符串。尝试这样的事情 -

$str = ''; // create a string, not an array
for($i = 0; $i < 20; $i++)
{
    if($letter_OR_number = rand(0,1))
    { // true: alphabet chosen
        $str .= chr(rand(65, 90));
    }
    else
    { // false: number chosen
        $str .= rand(0,9);
    }
    if($i % 4 == 3)
    {
        ($i < 19)? $str .= '-': $str .= ' ';
    }
}

$Query = "INSERT INTO `Donates` SET `serial` = '%s', `Coins` = '500'";
mysql_query(vsprintf($Query, $str),$Verbinding);

编辑
如果您仍想使用,$str[]那么您需要先内爆。

$str = ''; 
for($i = 0; $i < 20; $i++) { 
    if($letter_OR_number = rand(0,1)) { // true: alphabet chosen 
        $str[] = chr(rand(65, 90)); } 
    else { // false: number chosen 
        $str[] = rand(0,9); } 
    if($i % 4 == 3) { 
        ($i < 19)? $str[] = '-': $str[] = ' '; } 
} 
foreach($str as $val){ 
      echo $val; } 

$str = implode("",$str); // Implode to make your array a string    

$Query = "INSERT INTO Donates (serial, Coins) VALUES ('%s', '500')";
mysql_query(vsprintf($Query, $str),$link) or die(mysql_error()); mysql_close($link); ?> 
于 2013-06-30T08:16:38.743 回答