检查表中是不是存在列,如果没有,则添加列

Posted

技术标签:

【中文标题】检查表中是不是存在列,如果没有,则添加列【英文标题】:Checking table for existent columns, if not, add column检查表中是否存在列,如果没有,则添加列 【发布时间】:2017-07-13 01:16:30 【问题描述】:

我正在尝试制作时事通讯。用户必须填写一个表格,其中$emaila 是他的电子邮件。

<?php
$emaila="test@test.com";
$con=mysqli_connect("localhost","user","pass","dbname");
if (mysqli_connect_errno())

echo "Failed to connect to MySQL: " . mysqli_connect_error();

$val = mysqli_query("select $emaila from emails limit 1");
if($val !== FALSE)

mysqli_query($con,"ALTER TABLE emails ADD (".$emaila." VARCHAR(100))");
mysqli_close($con);

?>

它假设检查电子邮件是否已经在“电子邮件”表中作为列,如果不是,则应该将他的电子邮件作为列放在表中。不知道我做错了什么......

【问题讨论】:

test@test.com 这真的是一个专栏吗? $val = mysqli_query("select这里没有连接 应该是一列。如果不是,则应添加。 select $emaila from emails 转换为 select test@test.com from emails。检查查询mysqli_error($con) 中的错误,您会看到。但这永远不会发生,因为您没有将连接传递给查询。 如果您选择这样,如果该列不存在,您将收到错误消息。那没有意义。您想为每封没有列的电子邮件添加一列?这也没有意义。 这个问答***.com/q/22399477/1415724可以帮助你。然后,您可以将该.csv 文件放入Excel 中并对其进行修改,然后以某种方式重新导入phpmyadmin,或者使用PHP php.net/manual/en/function.fgetcsv.php 对其进行解析。另见***.com/q/16391528/1415724 和mysqltutorial.org/mysql-export-table-to-csv 【参考方案1】:

您不会使用ALTER TABLE 将数据添加到表中。你用INSERT

INSERT INTO `emails` (`column_name`) VALUES '$emaila'

您的测试应该是查看该电子邮件是否存在于表格中:

$val = mysqli_query($con,"select * from emails where email_column_name = '$emaila' ") or die (mysqli_error($con));
if($val)

mysqli_query($con,"INSERT INTO `emails` (`email_column_name`) VALUES '$emaila'")  or die (mysqli_error($con));
mysqli_close($con);


此外:Little Bobby 表示 your script is at risk for SQL Injection Attacks. 了解 prepared 的 MySQLi 语句。即使escaping the string 也不安全! Don't believe it?


编辑:根据 cmets,您需要从当前表中获取列名,遍历结果集并确认每个列名是电子邮件地址,然后将该地址插入新表中。下面是一些可以帮助您入门的内容:

SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='database_name' 
AND `TABLE_NAME`='emails';

此查询将从电子邮件表中返回一组列名(不要忘记更改数据库名称),您可以循环访问这些列名。

【讨论】:

我不习惯 MySQL 改进了那么多,我尝试学习但找不到太多关于它的信息...我认为$val = mysqli_query("select $emaila from emails limit 1"); 也有问题。 修复一件事,然后追查其他错误。 我测试了,还是不行...没有连接错误。它不会将 $emaila 添加为“电子邮件”表中的列... 您要添加列?或者您正在尝试向列中添加数据? 我正在尝试添加一列。

以上是关于检查表中是不是存在列,如果没有,则添加列的主要内容,如果未能解决你的问题,请参考以下文章

检查 OleDb 表中是不是存在列

MySQL,使用SQL检查表中是不是存在列

如何使用 python pyodbc 检查表中是不是存在列?

检查列是不是已存在,如果不存在,则在 sqlite 中更改表

如果列不存在,则无法添加?

如何检查 var 是不是存在于数据库列中,如果不存在则不执行任何操作