Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用SQL查询获取字段标志名称_Php_Mysql_Mysqli - Fatal编程技术网

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

非空标志=1
PRI_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
版本。,请注意,实际上这不是我要寻找的答案..请再看一次这个问题.这给了我们
标志值
。如何将它们转换为标志名称。但问题是,
标志值
与您上面所写的值不匹配。很抱歉,您应该将
&
与此数字一起使用,而不是
=
,毕竟我们仍然得到了
。我解释了此值的含义