Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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检查MySQL表中是否存在列_Php_Mysql - Fatal编程技术网

通过PHP检查MySQL表中是否存在列

通过PHP检查MySQL表中是否存在列,php,mysql,Php,Mysql,我创建了mysql表,并在其中放置了一些列 现在我想通过php检查数据库中是否存在某个列 像这样: if (column exist){ echo "Column in table is available." } else{ echo "Column doesnt exist."; } 有可能这样做吗 非常感谢您抽出时间:)试试看 $result = mysql_query("SHOW COLUMNS FROM `table` LIKE 'fieldname'"); $exists = (m

我创建了mysql表,并在其中放置了一些列

现在我想通过php检查数据库中是否存在某个列

像这样:

if (column exist){
echo "Column in table is available."
}
else{
echo "Column doesnt exist.";
}
有可能这样做吗

非常感谢您抽出时间:)

试试看

$result = mysql_query("SHOW COLUMNS FROM `table` LIKE 'fieldname'");
$exists = (mysql_num_rows($result))?TRUE:FALSE;
if($exists) {
   // do your stuff
}
更多详情:


注意:-不推荐使用mysql\*使用
mysqli
PDO
您可以使用mysql\/u列表\字段和mysql\/u数值\字段来获取表的列

$fields = mysql_list_fields('database_name', 'table_name');
$columns = mysql_num_fields($fields);
在PHP中:

$fields = mysql_list_fields('database_name', 'table_name');
$columns = mysql_num_fields($fields);
for ($i = 0; $i < $columns; $i++) {$field_array[] = mysql_field_name($fields, $i);}

if (!in_array('price', $field_array))
{
$result = mysql_query('ALTER TABLE table_name ADD price VARCHAR(10)');
}
或者你可以:

Show columns from table like 'string';

检查此问题:

在php中运行此查询,并检查行数是否大于0:-
DESC tablename“%columns\u name%”

好的,我在这个问题上花了5个小时浏览了每一个(有时是可笑的复杂)StackOverflow答案,但从来没有找到一个有效的答案,而且答案如此简单,令人沮丧,你会踢自己(我也是这样做的):

PHP7

$mysqli = new mysqli($mysql_url, $mysql_user, $mysql_password, $db_name);

$column_name = "my_column";
$table_name = "my_table";

if ($mysqli->query("SELECT $column_name FROM $table_name")){
        //my_column exists in my_table
    }
else{
        //my_column doesn't exist in my_table
}

数据库101….

如果您想找到至少下了一个销售订单的客户,可以使用EXISTS运算符,如下所示:

SELECT customerNumber,
         customerName
FROM customers
WHERE EXISTS
    (SELECT 1
    FROM orders
    WHERE orders.customernumber = customers.customernumber);
对于customers表中的每一行,查询将检查orders表中的customerNumber

如果customers表中出现的customerNumber在orders表中存在,子查询将返回第一个匹配行。结果,EXISTS操作符返回true并停止扫描orders表。否则,子查询不返回任何行,EXISTS运算符返回false

要获取尚未下过任何销售订单的客户,请使用not EXISTS运算符,如下所示:

SELECT customerNumber,
         customerName
FROM customers
WHERE NOT EXISTS
    (SELECT 1
    FROM orders
    WHERE orders.customernumber = customers.customernumber);

这很简单,但对我来说很有效:

1) 从所需的表中选择“全部”

$qry = "SELECT * FROM table";
2) 带来结果并验证该字段是否存在

if( $result = $mysqli->query($qry)  &&  isset($result['field_you_want']) ){
    //Exists
}else{
    //Doesn't exists
}
创建一个函数

function CheckIfColumnExist($string) {
global $sqlConnect;
if (empty($string)) {
    return false;
}
$query = mysqli_query($sqlConnect, "SELECT $string FROM `table_name`");
if (mysqli_num_rows($query) > 0)
{
$fetched_data = mysqli_fetch_assoc($query);
return true;
}
}
在PHP中

$string = $_POST['string'];
if(CheckIfColumnExist($string) == false){
echo "column doesn't exist!."; 
}else{
echo "column is existing!.";
}

mysql_*不受欢迎Hanks@Daan我正在更新我的answer@Daan您应该向OP指出这一点,因为OP已经在
mysql
中标记了这个问题。这很好。只需指出,所有其他答案都使用了
mysql
。你不能在问题得到的每一个回答上都指出这一点。这最好在问题的注释部分完成。这些方法的可能重复看起来在当前的PHP版本中被贬低了这会导致错误“不能将mysqli_result类型的对象用作数组”。您需要对其使用fetch方法或类似的方法。此外,如果有大量数据,您可以在查询中添加限制1。请为您的答案添加一些解释,以便其他人可以从中学习。请为您的答案添加一些解释,以便其他人可以从中学习检查列是否存在通常不应包含
ALTER TABLE
function CheckIfColumnExist($string) {
global $sqlConnect;
if (empty($string)) {
    return false;
}
$query = mysqli_query($sqlConnect, "SELECT $string FROM `table_name`");
if (mysqli_num_rows($query) > 0)
{
$fetched_data = mysqli_fetch_assoc($query);
return true;
}
}
$string = $_POST['string'];
if(CheckIfColumnExist($string) == false){
echo "column doesn't exist!."; 
}else{
echo "column is existing!.";
}