当我运行以下代码(由函数和do while循环组成)时,我得到以下mysql错误:'where子句'中的未知列'Tsi96fnl',其中Tsi96fnl是随机字符串.如果几乎尝试了一切,但我无法找到任何错误.也许这是因为我自己没有编写random_text函数,我不知道这个函数发生了什么(好吧,不是那么多).
function random_text($type, $length){
switch ( $type ) {
case 'alnum':
$pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
break;
case 'alpha':
$pool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
break;
case 'hexdec':
$pool = '0123456789abcdef';
break;
case 'numeric':
$pool = '0123456789';
break;
case 'nozero':
$pool = '123456789';
break;
case 'distinct':
$pool = '2345679ACDEFHJKLMNPRSTUVWXYZ';
break;
default:
$pool = (string) $type;
break;
}
$crypto_rand_secure = function ( $min, $max ) {
$range = $max - $min;
if ( $range < 0 ) return $min; // not so random...
$log = log( $range, 2 );
$bytes = (int) ( $log / 8 ) + 1; // length in bytes
$bits = (int) $log + 1; // length in bits
$filter = (int) ( 1 << $bits ) - 1; // set all lower bits to 1
do {
$rnd = hexdec( bin2hex( openssl_random_pseudo_bytes( $bytes ) ) );
$rnd = $rnd & $filter; // discard irrelevant bits
} while ( $rnd >= $range );
return $min + $rnd;
};
$token = "";
$max = strlen( $pool );
for ( $i = 0; $i < $length; $i++ ) {
$token .= $pool[$crypto_rand_secure( 0, $max )];
}
return $token;
}
$check = false;
do {
$randomId = random_text('alnum', 8);
$randomId = str_replace('"', "", $randomId);
$randomId = str_replace("'", "", $randomId);
$SQL = "SELECT * FROM login WHERE id = $randomId";
$result = mysqli_query($db_handle, $SQL) or die(mysqli_error($db_handle));
$num_rows = mysqli_num_rows($result);
if($num_rows = 0){
$check = true;
}
} while ($check != true);
echo $randomId;