Php 如何使用SQL查询获取字段标志名称
实际上,我想显示属于表的所有字段的标志名称。这是我们的脚本,我从中执行此操作Php 如何使用SQL查询获取字段标志名称,php,mysql,mysqli,Php,Mysql,Mysqli,实际上,我想显示属于表的所有字段的标志名称。这是我们的脚本,我从中执行此操作 <?php mysql_connect("localhost", "root", ""); mysql_select_db("DatabaseName"); $result = mysql_query("SELECT * FROM Table_Name"); $fields = mysql_num_fields($result); for ($i=0; $i < $fields; $i++) {
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("DatabaseName");
$result = mysql_query("SELECT * FROM Table_Name");
$fields = mysql_num_fields($result);
for ($i=0; $i < $fields; $i++) {
$flags = mysql_field_flags($result, $i); echo $flags . "<br>";
}
mysql_free_result($result);
mysql_close();
?>
这很好,但是问题是这个脚本是mysql
version,但是我想要mysqli
版本的脚本。是否有任何方法可以通过脚本的mysqli
版本执行相同的操作
还有一个问题是-这个脚本在for循环中使用了offset
值。是否有任何方法可以显示标志
值而不显示偏移值
或者不使用偏移值,我们可以使用字段名吗?尝试与此相关的内容
if($field_flags == false) {
for($j=0; $j<$num_fields; $j++) {
$field_flags[$j] = mysqli_fetch_field_direct($result, $j);
if(strpos($field_flags[$j]->flags, 'NOT_NULL') !== false) {
//Do something here
} else {
//Do something else
}
}
if($field\u flags==false){
对于($j=0;$jflags,'NOT_NULL')!==false){
//在这里做点什么
}否则{
//做点别的
}
}
或者看看这个
这将获取标志
$mysqli=new mysqli('localhost','root','','database');
$result=$mysqli->query('SELECT * FROM table');
while($meta = mysqli_fetch_field($result)){
$flags=$meta->flags;
echo $flags."<br>";
print_r(get_flag1($flags));
echo '<br/>';
print_r(get_flag2($flags));
echo '<br/>';
}
function get_flag1($flag_value){
$result['NOT_NULL_FLAG'] = 1&$flag_value?1:0;
$result['PRI_KEY_FLAG'] = 2&$flag_value?1:0;
$result['UNIQUE_KEY_FLAG'] = 4&$flag_value?1:0;
$result['BLOB_FLAG'] = 16&$flag_value?1:0;
$result['UNSIGNED_FLAG'] = 32&$flag_value?1:0;
$result['ZEROFILL_FLAG'] = 64&$flag_value?1:0;
$result['BINARY_FLAG'] = 128&$flag_value?1:0;
$result['ENUM_FLAG'] = 256&$flag_value?1:0;
$result['AUTO_INCREMENT_FLAG'] = 512&$flag_value?1:0;
$result['TIMESTAMP_FLAG'] = 1024&$flag_value?1:0;
$result['SET_FLAG'] = 2048&$flag_value?1:0;
$result['NUM_FLAG'] = 32768&$flag_value?1:0;
$result['PART_KEY_FLAG'] = 16384&$flag_value?1:0;
$result['GROUP_FLAG'] = 32768&$flag_value?1:0;
$result['UNIQUE_FLAG'] = 65536&$flag_value?1:0;
return $result;
}
function get_flag2($flag_value){
if(1&$flag_value)
$result[]='NOT_NULL_FLAG';
if(2&$flag_value)
$result[]='PRI_KEY_FLAG';
if(4&$flag_value)
$result[]='UNIQUE_KEY_FLAG';
if(16&$flag_value)
$result[]='BLOB_FLAG';
if(32&$flag_value)
$result[]='UNSIGNED_FLAG';
if(64&$flag_value)
$result[]='ZEROFILL_FLAG';
if(128&$flag_value)
$result[]='BINARY_FLAG';
if(256&$flag_value)
$result[]='ENUM_FLAG';
if(512&$flag_value)
$result[]='AUTO_INCREMENT_FLAG';
if(1024&$flag_value)
$result[]='TIMESTAMP_FLAG';
if(2048&$flag_value)
$result[]='SET_FLAG';
if(32768&$flag_value)
$result[]='NUM_FLAG';
if(16384&$flag_value)
$result[]='PART_KEY_FLAG';
if(32768&$flag_value)
$result[]='GROUP_FLAG';
if(65536&$flag_value)
$result[]='UNIQUE_FLAG';
return $result;
}
$mysqli=newmysqli('localhost','root','database');
$result=$mysqli->query('SELECT*fromtable');
while($meta=mysqli\u fetch\u字段($result)){
$flags=$meta->flags;
回显$flags。“
”;
打印(获取标志1($flags));
回声“
”;
打印(获取标志2($flags));
回声“
”;
}
函数get_flag1($flag_值){
$result['NOT_NULL_FLAG']=1和$FLAG_值?1:0;
$result['PRI_KEY_FLAG']=2和$FLAG_值?1:0;
$result['UNIQUE_KEY_FLAG']=4和$FLAG_值?1:0;
$result['BLOB_FLAG']=16和$FLAG_值?1:0;
$result['UNSIGNED_FLAG']=32和$FLAG_值?1:0;
$result['ZEROFILL\u FLAG']=64和$FLAG\u值?1:0;
$result['BINARY_FLAG']=128和$FLAG_值?1:0;
$result['ENUM_FLAG']=256和$FLAG_值?1:0;
$result['AUTO_INCREMENT_FLAG']=512和$FLAG_值?1:0;
$result['TIMESTAMP\u FLAG']=1024和$FLAG\u值?1:0;
$result['SET_FLAG']=2048和$FLAG_值?1:0;
$result['NUM_FLAG']=32768和$FLAG_值?1:0;
$result['PART_KEY_FLAG']=16384和$FLAG_值?1:0;
$result['GROUP_FLAG']=32768和$FLAG_值?1:0;
$result['UNIQUE_FLAG']=65536和$FLAG_值?1:0;
返回$result;
}
函数get_flag2($flag_值){
如果(1&$flag\u值)
$result[]=“非空标志”;
如果(2&$flag\u值)
$result[]='PRI_KEY_FLAG';
如果(4&$flag_值)
$result[]=“唯一密钥标志”;
如果(16&$flag_值)
$result[]='BLOB_FLAG';
如果(32&$flag\u值)
$result[]='UNSIGNED_FLAG';
如果(64&$flag_值)
$result[]=“零填充标志”;
如果(128&$flag_值)
$result[]=“二进制_标志”;
如果(256&$flag_值)
$result[]='ENUM_FLAG';
如果(512&$flag\u值)
$result[]=“自动增量标志”;
if(1024&$flag_值)
$result[]='TIMESTAMP_FLAG';
if(2048和$flag_值)
$result[]='SET_FLAG';
if(32768和$flag_值)
$result[]='NUM_FLAG';
if(16384和$flag_值)
$result[]=“部分键标志”;
if(32768和$flag_值)
$result[]='GROUP_FLAG';
if(65536和$flag_值)
$result[]='UNIQUE_FLAG';
返回$result;
}
它是如何工作的
使用带有这些值的&
检查想要的标志,如果标志关闭,则输出0;如果标志打开,则输出值
例如,要检查UNIQUE\u KEY\u FLAG
使用$flags\u value&4
它将在关闭时输出0,在打开时输出4
非空标志=1PRI_KEY_FLAG=2
唯一键标志=4
BLOB_标志=16
无符号_标志=32
零填充标志=64
二进制_标志=128
枚举标志=256
自动增量标志=512
时间戳_标志=1024
SET_FLAG=2048
NUM_FLAG=32768
零件键标志=16384
组标志=32768
唯一_标志=65536 解释 该标志是二进制数,如
10110011
每一位表示一个标志状态on或off 0表示off,1表示on
例如,要检查唯一键标志,它是第三位,因此当您在100B
和10110011B
之间使用and运算符时,除所需位外,结果将全部为零
所以如果这个位是零,那么所有的数字都是零,这对php来说意味着false
如果是一个,结果将是
100B
在php中,任何不为零的数字都意味着对php是真的问题在于mysqli_num_字段
?@robert Becuase从一开始我就在应用程序中使用mysqli
版本。,请注意,实际上这不是我要寻找的答案..请再看一次这个问题.这给了我们标志值
。如何将它们转换为标志名称。但问题是,标志值
与您上面所写的值不匹配。很抱歉,您应该将&
与此数字一起使用,而不是=
,毕竟我们仍然得到了值
。我解释了此值的含义