【问题标题】:Using a variable to hold a table name, and using that variable in queries使用变量来保存表名,并在查询中使用该变量
【发布时间】:2013-08-13 12:51:04
【问题描述】:

我有下一个代码来构造我的变量:

 $idProvincia=$_GET["ciudad"];

表名会根据 $idProvincia 的值而改变。 表名:

 $post="wp_".$idProvincia."_post";

我想在查询中包含 $post 变量:

$result = mysql_query ("SELECT post.ID, post.post_title, post.guid, post.post_content, postmeta.meta_value, postmeta.meta_key
FROM `".$post."` AS post
INNER JOIN wp_".$idProvincia."_postmeta AS postmeta ON post.ID = postmeta.post_id
WHERE postmeta.meta_key='fc_start_datetime' AND post.post_status='publish' AND post.post_type='post'
ORDER BY postmeta.meta_value ") or die (mysql_error());

我无法得到正确的结果。我已经阅读了很多手册,但我无法获得查询功能。

我想对更多变量执行相同的查询过程

【问题讨论】:

  • 您从上述查询中得到了什么?
  • 请停下来!阅读以下内容:stackoverflow.com/questions/732561/… 然后阅读以下内容:php.net/manual/en/mysqli.quickstart.prepared-statements.php 即使您让该代码正常工作,您也只是从安全角度来找麻烦。
  • @bgp 我知道注入问题,我只是想让它工作,我稍后会改变它,没有理由投反对票,我只需要知道如何连接和让它正常工作
  • 警告您的代码容易受到 sql 注入攻击,并且您使用的是过时的 api ..使用 PDO 或 mysqli 检查此stackoverflow.com/questions/12859942/…
  • @n4h1n 很公平。我建议先在问题中说明这一点 - 正如您所看到的那样。记录在案,但不是我的反对票。

标签: php mysql string variables concatenation


【解决方案1】:

您应该将那个 idProvincia 东西移到表 body,而不是名称。

在表wp_post 中添加一个名为idProvincia 的字段,然后以通常的方式添加这个数字:

$ciudad = mysql_real_escape_string($_GET["ciudad"]);
$sql = "SELECT post.ID, post.post_title, post.guid, post.post_content,
               postmeta.meta_value, postmeta.meta_key
FROM wp_post AS post
INNER JOIN wp_postmeta AS postmeta ON post.ID = postmeta.post_id
WHERE postmeta.meta_key='fc_start_datetime' AND post.post_status='publish' AND post.post_type='post' AND idProvincia = '$ciudad'
ORDER BY postmeta.meta_value "
$result = mysql_query ($sql) or trigger_error(mysql_error());

【讨论】:

  • 我无法将 idProvincia 添加到表 wp_post。 $idProvincia 值会改变,查询也必须改变
  • 是的。这就是为什么它被添加到查询中。这就是 SQL 的工作方式:您必须将数据存储在表体中,而不是表名中
猜你喜欢
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
相关资源
最近更新 更多