【问题标题】:ALTER TABLE ADD AFTER works in SQL query but not in PHPALTER TABLE ADD AFTER 适用于 SQL 查询,但不适用于 PHP
【发布时间】:2015-01-28 17:56:18
【问题描述】:

当我直接在 phpMyAdmin 中运行 SQL 查询时,它可以工作;但是,从 PHP 文件运行相同的查询不会影响数据库表,也不会引发错误。

ALTER TABLE tender_230115 ADD avt DECIMAL(10,2) NOT NULL AFTER vpm

PHP 版本 5.3.28。确实建立了数据库连接。当我跑步时:

$test_query = "ALTER TABLE tender_230115 ADD avt DECIMAL(10,2) NOT NULL AFTER vpm";
$upload_test = $conn->query($test_query);

数据库表中没有任何影响,而 var_dump($upload_test) = bool(false)。

引号和反引号也无济于事。使用 mysqli 驱动程序。

【问题讨论】:

  • 在 php 代码中,最后一行必须是第一行,并且缺少引号。
  • 您对表名和列名使用反引号而不是 qutoes
  • @Mihai Backticks 也不起作用。它们是颠倒的,当我写这个问题时,它们是文本。不知道为什么它现在看起来像是代码的一部分。
  • @Mihai 你是说F5吗?我经常这样做。
  • 显示你如何连接到数据库

标签: php sql mysqli alter


【解决方案1】:

放弃上面@Keo 和@Mihai 所说的内容,您的代码必须是:

$existing_tender = "tender_230115"; 
$existing_user = "avt"; 
$penultimate_name = "vpm";
$insert_column = "ALTER TABLE `$existing_tender` ADD `$existing_user` DECIMAL(10,2) NOT NULL AFTER `$penultimate_name`";
$upload = $conn->query($insert_column);

要查看有关已发生错误的更多信息,您可以在上面的代码下方添加以下代码:

var_dump($conn->error);

编辑作者指定他的问题是什么。这是从下面这个答案的 cmets 中提取的。将其放在这里以便更清楚实际问题是什么:

好的,所以要研究的其他内容是权限。是mysql用户 在 PhpMyAdmin 中与您在 PHP 中使用的用户相同吗?例如, 您可以使用您的个人帐户登录到 PhpMyAdmin,但是您 可能有一个不同的项目帐户用于您的 mysqli 连接。如果是这种情况,请确保您的项目 mysql 帐户具有 ALTER 表的权限。

【讨论】:

  • 嗯,没那么简单。通过说 $existing_tender = "tender_230115" 我只是说明了它的价值。当然,我在 SQL 语句之前声明了变量。对不起,如果我让你有点困惑。
  • 啊,抱歉,之前声明的变量还不清楚。您的错误日志中是否出现任何错误? @雪人
  • 不,它运行没有抛出错误,但 phpMyAdmin 中的表没有变化。
  • 其他需要注意的事项: 1) 您是否连接到同一个数据库?您可以检查您的连接设置 2) var_dump $upload 的内容并查看返回的内容 3) 通过终端登录数据库并查看是否在此处进行了更改,但可能不在 PhpMyAdmin 中? (不知道为什么会这样,但值得一试)@Snowman
  • 好吧,它只是返回 FALSE。 DB 是一样的。
【解决方案2】:

@Michael Lea Crawford 绝对正确地指出了用户权限。 Cpanel 为您提供 MySQL 数据库菜单,用户可以在其中选择他的用户名并更改权限,以便能够使用来自 PHP 文件的 ALTER TABLE SQL 请求。这同样适用于 UPDATE、CREATE 和其他 SQL 命令。

【讨论】:

  • 太棒了!很高兴发现问题。我更新了上面的答案以反映,以便更清楚解决方案是什么。
猜你喜欢
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多