生成100个10位数的随机数并保存到数据库中

时间:2017-03-17 18:34:13

标签: php mysql random

这是一个非常简单的功能,但它一直给我错误。我正在编写一个脚本来生成100个10位数的随机数,但我一直有这个错误:“检查与MySQL服务器版本相对应的手册,以便在第1行'rand(1111111111, 9999999999)'附近使用正确的语法。

这是我的代码

<?php
$cxn = new mysqli("localhost", "CJroot", "password", "random");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
for ($i=0; $i < 100; $i++) { 
    $sql = "INSERT INTO random (random) VALUES 'rand(1111111111, 9999999999)'";
    if(!mysqli_query($cxn,$sql)) {
        die("Error: ".mysqli_error($cxn));
    }
}

/* close connection */
$cxn->close();
?>

4 个答案:

答案 0 :(得分:2)

你需要像这样连接你的字符串。

$sql = "INSERT INTO random (random) VALUES '" . rand(1111111111, 9999999999) . "'";

答案 1 :(得分:2)

MySQL抱怨的语法错误(在您的SQL语句中)缺少值列表周围的parens。这是无效的:

INSERT INTO ... VALUES 'foo'

应该是

INSERT INTO ... VALUES ( 'foo' )
                       ^       ^

一旦你克服了这个驼峰,单引号中的值被解释为字符串文字。在示例代码中,'rand(11111,99999)'是一个文字,一串字符。它不是对函数的引用。

如果我们想使用MySQL RAND()函数,我们可以这样做:

INSERT INTO random (random) VALUES ( FLOOR(1000000000 + RAND() * 9000000000) )

我们可以执行100次,或者,编写返回100行的SELECT语句并在单个插入中插入100行会更有效。

或者:

INSERT INTO random (random) VALUES 
 ( FLOOR(1000000000 + RAND() * 9000000000) )
,( FLOOR(1000000000 + RAND() * 9000000000) )
,( FLOOR(1000000000 + RAND() * 9000000000) ) 
, ...
,( FLOOR(1000000000 + RAND() * 9000000000) ) 

就数据库性能而言,运行插入100行的单个INSERT语句通常比执行100个单独的插入语句更有效。处理RBAR(通过痛苦的排行)可能会非常缓慢。

如果需要循环,如果我们在时间插入四行,我们只需要经过循环25次。这比我们需要执行的语句少75%。

我们可以在循环之外指定要执行一次的SQL文本,然后只重复执行相同的SQL

$sql = "INSERT INTO random (random) VALUES"
     . " ( FLOOR(1000000000 + RAND() * 9000000000) )"
     . ",( FLOOR(1000000000 + RAND() * 9000000000) )"
     . ",( FLOOR(1000000000 + RAND() * 9000000000) )"
     . ",( FLOOR(1000000000 + RAND() * 9000000000) )";

for ($i=0; $i < 25; $i++) { 
  if(!mysqli_query($cxn,$sql)) {
    die("Error: ".mysqli_error($cxn));
  }
}

答案 2 :(得分:0)

你也可以直接用MySQL这样做:

INSERT INTO random (random) 
SELECT CAST( (RAND()*(9999999999-1111111111)) AS UNSIGNED)  + 1111111111;

或100行:

INSERT INTO random (random)
SELECT  CAST( (RAND()*(9999999999-1111111111)) AS UNSIGNED)  + 1111111111 AS random FROM (
SELECT 0 AS h UNION SELECT 1  UNION SELECT 2  UNION SELECT 3  UNION SELECT 4  UNION SELECT 5  UNION SELECT 6  UNION SELECT 7  UNION SELECT 8  UNION SELECT 9 
) h
CROSS JOIN
( SELECT 0 AS l UNION SELECT 1  UNION SELECT 2  UNION SELECT 3  UNION SELECT 4  UNION SELECT 5  UNION SELECT 6  UNION SELECT 7  UNION SELECT 8  UNION SELECT 9 ) l;

答案 3 :(得分:0)

这很好用

<?php
$cxn = new mysqli("localhost", "CJroot", "password", "random");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
$sql = "INSERT INTO random (random) VALUES"
     . " ( FLOOR(1000000000 + RAND() * 9000000000) )"
     . ",( FLOOR(1000000000 + RAND() * 9000000000) )"
     . ",( FLOOR(1000000000 + RAND() * 9000000000) )"
     . ",( FLOOR(1000000000 + RAND() * 9000000000) )";

for ($i=0; $i < 25; $i++) { 
  if(!mysqli_query($cxn,$sql)) {
    die("Error: ".mysqli_error($cxn));
  }
}
$cxn->close();
?>