-1

mysqlテーブルにループを介してデータを挿入したいのですが、500回挿入したい場所でループが実行されるときにのみ挿入されます。下のテーブルに同じデータを500回挿入するコードは、事前に感謝します

enter code here



<html>
<head>
</head>
<body>
<div>
<?php

$con=mysqli_connect("localhost","root","khan","first");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

for($i=1;$i<500;$i++)
{
 $sql="INSERT INTO bio(name, fathername , address) VALUES('khan','khan','khan')";  
 echo "Number " . $i . "<br>";
}

if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }

mysqli_close($con);
?>
</div>
</body>
</html>
4

2 に答える 2

0

スコープmysqli_query内に含めるfor

$con=mysqli_connect("localhost","root","khan","first"); 
// Check connection 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

for($i=1;$i<500;$i++) { 
    $mysqli_query ="INSERT INTO bio(name, fathername , address) VALUES('khan','khan','khan')";
    echo "Number " . $i . "<br>"; 
    // <<-- you always leave a closing bracket here 
    if (!mysqli_query($con,$sql)) { 
        die('Error: ' . mysqli_error($con)); 
    } 
} 
mysqli_close($con);

これで、クエリを使用してループすることなく、db 側でそれを行うことができます

INSERT INTO bio(name, fathername , address)
SELECT 'khan','khan','khan'
  FROM
(
select a.N + b.N * 10 + c.N * 100 + 1 n
from (select 0 as N union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) a
      , (select 0 as N union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) b
      , (select 0 as N union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) c
) t
WHERE t.n < 501

テーブルに偽のデータを入力する方法の詳細を参照してください https://stackoverflow.com/a/17139749/1920232

于 2013-06-17T10:01:54.713 に答える
0

これは、ループの後にのみ挿入するためです

これを試して:

for($i=1;$i<500;$i++)
{
 $sql="INSERT INTO bio(name, fathername , address) VALUES('khan','khan','khan')";  
 echo "Number " . $i . "<br>";

 if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }
}

ご覧のとおり、mysqli_queryこれで はループ内にあるため、1 回だけでなく 500 回実行されます (配置に注意して{ }ください。

またdie(); 、これの代わりに適切なエラー処理を使用しないようにしてください。

例えば:

for($i = 1; $i < 500; $i++) {
//INSERT AND STUFF
if(!mysqli_query($con, $sql)) {
echo "Something went wrong. Try again.";
break;
}
}

もちろん、間違ったものを返したいと思うかもしれません。したがって、SQLで発生した実際のエラー。

これについては、Mysqli のドキュメントを参照してください。

これを関数に入れる場合は、使用する必要はありませんbreak;return "something";代わりに、ステートメントを使用してエラーを返し、for ループを終了することができます。

これで、次のようになります。

function insertFunction() {
   for(.....
       //DO INSERT
       if(!mysqli_query(...
            return "Errormessage: "+ $mysqli->error;

}

さらに、挿入の準備済みステートメントと、データベースに 500 回クエリを実行する代わりに、500 レコードで 1 回の挿入のみを実行する方法を確認することもできます。

これにより、準備済みステートメントを使い始めることができます

于 2013-06-17T10:02:10.953 に答える