为什么它不把它放入mysql数据库?

时间:2013-06-30 07:38:38

标签: php mysql

好的,我现在有另一个问题。这应该将序列放入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);
    ?>

3 个答案:

答案 0 :(得分:1)

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

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

应该是

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

$TestData[] = array($val);

你创建了一个数组数组,因此

$TestData[] = $val;

可能是你想要的......

答案 1 :(得分: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); ?> 

答案 2 :(得分:0)

您要做的是为您的硬币创建20个字符的唯一标识符,方法是以四个为一组创建字母和数字的混合。

PHP和MySQL都提供了一个函数,它会生成一个随机字符串,尽管有些细微差别。这样的字符串通常称为UUID(通用唯一标识符)。这实际上是一个标准,因为许多系统都需要这样的东西。

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

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

现在,这并没有以您要查找的格式提供数字。但是,有一个comment on the manual page提供了一个方便的功能:

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,因为它是&#34;版本4&#34; UUID规范。以下是该函数edd08995-9d48-4e04-8e42-5270377c331f的示例字符串。

MySQL有一个内置的uuid function,完全相同:

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的讨论,请参阅手册中的this page

以下是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;
    }
?>