【问题标题】: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) 中的错误,您会看到。但这永远不会发生,因为您没有将连接传递给查询。
  • 如果您选择这样,如果该列不存在,您将收到错误消息。那没有意义。您想为每封没有列的电子邮件添加一列?这也没有意义。
  • 这个问答stackoverflow.com/q/22399477/1415724可以帮助你。然后,您可以将该.csv 文件放入Excel 中并对其进行修改,然后以某种方式重新导入phpmyadmin,或者使用PHP php.net/manual/en/function.fgetcsv.php 对其进行解析。另见stackoverflow.com/q/16391528/1415724mysqltutorial.org/mysql-export-table-to-csv

标签: php mysqli


【解决方案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. 了解 preparedMySQLi 语句。即使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 添加为“电子邮件”表中的列...
  • 您要添加列?或者您正在尝试向列中添加数据?
  • 我正在尝试添加一列。
猜你喜欢
  • 2020-08-24
  • 1970-01-01
  • 2016-01-21
  • 2012-04-15
  • 1970-01-01
  • 2012-03-22
  • 2020-09-30
  • 2021-06-02
  • 1970-01-01
相关资源
最近更新 更多