使用 php 代码调用 MYSQL CREATE VIEW?

Posted

技术标签:

【中文标题】使用 php 代码调用 MYSQL CREATE VIEW?【英文标题】:Calling MYSQL CREATE VIEW using php code? 【发布时间】:2011-10-07 15:50:42 【问题描述】:

这里需要一些启发,这是我在这里的第一篇文章。

我想使用 php 调用和使用我之前创建的 mysql 视图...可以吗? 或者换句话说, 我想知道....我们可以或者我们如何调用我们已经使用 php 创建的 mysql 视图?减少长查询编码

标准通用代码如下:

$sql= " SELECT shipping.tarrif1, city.city_name
         FROM shipping JOIN city
   ON shipping.id_city = city.id_city";
$db->QueryArray($sql);   

while ($row = $db->Row()) 
echo $row->city_name. " - " . $row->tarrif1 . "<br />\n"; 

现在是 MYSQL 视图:

$sql= " CREATE VIEW shipsumarry AS SELECT shipping.tarrif1, city.city_name
         FROM shipping JOIN city
   ON shipping.id_city = city.id_city";

纯MYSQL命令:

query: SELECT * FROM shipsummary

在 PHP 中:

 $sql = i'm badly stuck here...please help

我们如何使用 php 访问它。

感谢之前

加法1:

好的...让我重写示例:

$sql1= " CREATE VIEW shipsumarry AS SELECT shipping.tarrif1, city.city_name
         FROM shipping JOIN city
   ON shipping.id_city = city.id_city";
$sql2= "SELECT * FROM shipsummary";
$db->QueryArray($sql2);

$sql2 看不到shipsummary VIEW,因为它已经在另一个变量中了

如何使用并执行 $sql1 ? & $sql2?

【问题讨论】:

您真的执行了CREATE VIEW 语句吗?我只看到它分配给变量$sql。而且您不会在每次页面加载时都重新创建它,是吗? 理想情况下,视图的行为与表格完全一样。所以你在 PHP 中查询它,就好像它是一个表一样。如果这不起作用,请编辑您的帖子以包含您在尝试 Michael 发布的代码时收到的错误消息。 @Michael :我还没有执行它,因为分配它后我被卡住了...... @derobert : 是的,你是对的,它显示空白屏幕,并且 php 错误报告已设置为全部 @BayuSetiawan:然后检查您的 Web 服务器错误日志。或者您设置 PHP 日志记录的任何地方。它会产生错误,您只需要弄清楚如何查看它。 (但是,我猜,这是一个权限错误) 【参考方案1】:

在 PHP 中的过程是相同的 - 客户端 (PHP) 将 MySQL 视图视为常规表,因此将其查询为

mysql_query("SELECT * FROM shipsummary");

// Or for whatever framework you're using:
$db->QueryArray("SELECT * FROM shipsummary"); 

应该可以正常工作。如果它不能正常工作,您访问视图的 MySQL 用户可能有损坏的权限。 (不过似乎不太可能)。

更新

在你编辑你的问题后,我可以很清楚地看到问题。

$sql1= " CREATE VIEW shipsumarry AS SELECT shipping.tarrif1, city.city_name
         FROM shipping JOIN city
   ON shipping.id_city = city.id_city";
$sql2= "SELECT * FROM shipsummary";

// Here, you need to execute $sql1 before $sql2 is useful.
$db->QueryArray($sql1);
// Now execute $sql2
$db->QueryArray($sql2);

我们不知道您使用的是什么数据库类或框架,但如果有与QueryArray() 类似的方法,它不返回结果集,而只是执行一条语句,请改用它来创建视图.

现在,说了这么多……

除非每次执行此代码时视图的定义都必须更改,并且除非您有理由在每次执行此脚本结束时使用DROP VIEW shipsummary,否则它将使 far, far, far, far ... . 更有意义的是简单地在数据库中创建视图,它将永远保留在那里,而不是继续用 PHP 重新创建它。视图一旦创建,就会保持创建状态。

不要将它们视为临时查询时间/代码保护程序。在数据库中创建您需要ONCE的视图(使用 PHPMyAdmin 或 mysql CLI,或者您创建的表),并使用 PHP 访问它们。

【讨论】:

是的,我也考虑过权限,但大多数时候是在创建过程中,您缺少读取部分的权限...... 我已经检查了 mysql 权限,并且一切都已完全检查,主要问题是因为我已经创建了包含“CREATE VIEW”的第一个 php 变量,但 VIEW 仅对第一个 php 可见变量,但不是第二个 php 变量,换句话说,我想这样称呼它: $db->QueryArray($2nd var that contains "SELECT * FROM shipsummary") 这个“shipsummary”对 2nd var 不可见。我必须重构我的 php dbquery 类吗? @BayuSetiawan 将它们存储到单独的变量中。无需一遍又一遍地重复使用$sql。将视图创建存储到一个变量中,执行它以创建视图,然后使用未来的QueryArraY() 调用对其执行查询。 @BayuSetiawan 查看上面的补充和注释。 @Michael:感谢您的最新回复..但迈克尔不起作用,因为 QueryArray() 已经返回数组结果,我应该在 db 类中创建语句生成器函数吗?给我这个语句的例子:如何调用“shipsummary”视图,在我们在 $sql1 中创建并分配它之后,因为我们无法在 sql1 中提取“shipsummary”视图?【参考方案2】:

为什么不直接发送呢

SELECT * FROM shipsummary

对于 mysql 查询,它应该可以工作,除非我不理解你的问题...

【讨论】:

以上是关于使用 php 代码调用 MYSQL CREATE VIEW?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PHP 代码中调用 MySQL 存储过程?

如何从 PHP 代码中调用 MySQL 存储过程?

PHP MySQL 创建数据库和表 之 Create

php socket create_socket 块

PHP MySQL - 为啥存储过程调用在 PHP 代码中意外结束

mysql 存储过程 出现unknown column