【发布时间】:2018-05-21 23:42:48
【问题描述】:
我正在尝试使用 while 循环将一行插入到一个表中,以便每次从另一个表中提取数据。我目前拥有的代码将第一个用户数据插入数据库。
如果插入查询在循环之外,它将输入最后一个用户数据。遍历数组一定是个问题。有没有办法可以为循环的每次传递索引数组值?
$query = "SELECT * FROM users_table" ;
$statement = $db->prepare($query);
$rows = $statement->fetchAll();
$statement->execute();
while($rows = $statement->fetch()){
$salted = $sso_key . $companyId;
$hash = hash('sha1',$salted,true);
$saltedHash = substr($hash,0,16);
$iv = substr(md5(microtime()),rand(0,16),16); //Generate random 16 bit string
$user_data = array(
"user_id" => $rows['id'],
"first_name" => $rows['first_name'],
"last_name" => $rows['last_name'],
"email" => $rows['email'],
"position" => $rows['type']);
$data = json_encode($user_data);
$data = $iv . $data;
$pad = 16 - (strlen($data) % 16);
$data = $data . str_repeat(chr($pad), $pad);
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'','cbc','');
mcrypt_generic_init($cipher, $saltedHash, $iv);
$encryptedData = mcrypt_generic($cipher,$data);
mcrypt_generic_deinit($cipher);
$encryptedData = base64_encode($encryptedData);
$token = array(
"token" => $encryptedData
);
$token_data = json_encode($token);
echo "
<br>Here is the token for ".$user_data['first_name'].", ".$user_data['last_name']."
".$user_data['email'] ." :
" . $token['token'];
$query = "INSERT INTO another_table
(token ,first_name,last_name,email,position)
VALUES (:token, :first_name,
:last_name, :email, :position)";
$statement = $db->prepare($query);
$statement->bindValue(':token', $token['token']);
$statement->bindValue(':first_name', $user_data['first_name']);
$statement->bindValue(':last_name', $user_data['last_name']);
$statement->bindValue(':email', $user_data['email']);
$statement->bindValue(':position', $user_data['position']);
$statement->execute();
}
?>
【问题讨论】:
-
在拨打
$statement->execute()之前,您不能拨打$statement->fetchAll()。当您调用fetchAll()时,它会获取所有行,因此while ($rows = $statement->fetch())没有任何内容可供获取。 -
你必须在while循环上方定义数组。
-
@RavinderReddy 为什么他必须这样做?他不是每次都推入数组,他只是将它用作循环中的临时对象。
-
我看不出为什么循环只会插入第一个用户的数据。
-
他从第一个
$statement对象吹出循环内的对象$statement。那只会破坏浩劫。
标签: php mysql arrays pdo while-loop