如何从具有TABLE_NAMES

时间:2018-12-20 03:00:32

标签: php mysql

我想从两个表中选择记录。这两个表的前缀为“ shop_”。

如何在sql语句中选择两家商店的记录?

我当前的发言:

// Select
$stmt = $mysqli->prepare("SELECT name, html_id, price FROM database_name WHERE TABLE_NAME LIKE 'shop%'");
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_assoc())
{
    $arr[] = $row;
}

$name = [];
foreach($arr as $arrs)
{
    $name[] = array(0 => $arrs['name'], 1 => $arrs['html_id'], 2 => $arrs['price']); //here
}
$stmt->close();

print_r($name);

mysql php当前错误是:

Fatal error: Uncaught Error: Call to a member function execute() on boolean in C:\wamp642\www\webcart\search.php on line 17 and line 17 is: $stmt->execute();

我可以使用以下命令将表“显示”:

$stmt = $mysqli->prepare("show tables like '%shop%'");

但是它没有得到记录,只是我认为的一个对象。

“显示类似'%shop%'的表”的输出按应有的方式打印2个数组,但是这些数组为空,没有数据/记录。

我认为这是需要工作的sql语句。谢谢。

编辑:

我也尝试过:

$stmt = $mysqli->prepare("SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='feeds' AND TABLE_NAME LIKE 'shop%'");

编辑:search.php的内容

<?php 

include 'define.php';

$mysqli = new mysqli($host, $db_user, $db_password, $db_database);
if($mysqli->connect_error)
{
    ?><script>var profiles_delete_modal_1 = ' Error 3: Problem deleteing profile. Make sure database login credentials are correct.';</script>
    <script>$(".modal").css({"opacity":"1", "z-index":"100"});$(".modal_mid").html("<pre>" + profiles_delete_modal_1 + "</pre>");setTimeout(function(){$(".modal").css({"opacity":"0", "z-index":"-100"});},5000);</script><?php
    exit;
}

$shop = 'shop';
// Select
//$stmt = $mysqli->prepare("show tables like '%shop%'");
//$stmt = $mysqli->prepare("SELECT * FROM feeds WHERE TABLE_NAME LIKE 'shop%'");
$stmt = $mysqli->prepare("SELECT name, html_id, price FROM database_name WHERE TABLE_NAME LIKE 'shop%'");
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_assoc())
{
    $arr[] = $row;
}

$n=0;
$name = [];
foreach($arr as $arrs)
{
    $name[] = array(0 => $arrs['name'], 1 => $arrs['html_id'], 2 => $arrs['price']); //here
    $n++;
}
$stmt->close();

print_r($name);

以及define.php的内容:

$www_dir = 'webcart';
$url_root = 'http://localhost/' . $www_dir . '';
$www_dir_slash = $_SERVER['DOCUMENT_ROOT'] . '' . $www_dir . '/';
$host = 'localhost';
$db_user = 'webcart_admin';
$db_password = 'asd123';
$db_database = 'shop';

$_SESSION['host'] = $host;
$_SESSION['db_user'] = $db_user;
$_SESSION['db_password'] = $db_password;
$_SESSION['db_database'] = $db_database;

编辑

通过下面给出的答案,我已经能够创建一个像这样的字符串:

SELECT name, html_id, price FROM shop_a UNION shop_b

但是它不能正确执行。

这是我的代码:

$stmt = $mysqli->prepare("SELECT name, html_id, price FROM shop_a UNION shop_b"); 
$result = $stmt->execute();

它出现以下错误:

Fatal error: Uncaught Error: Call to a member function execute() on boolean in C:\wamp642\www\webcart\search.php on line 43

编辑

我会尽快发布答案。语句如下:

"SELECT name, html_id, price FROM shop_a UNION SELECT name, html_id, price from shop_b"

2 个答案:

答案 0 :(得分:0)

SELECT查询用于从数据库表而非数据库本身获取数据。因此,您需要在查询的FROM部分中提供一个表名。

考虑到您正在尝试从相似的表(相同的字段)中获取数据...

$stmt = $mysqli->prepare("SELECT table_name FROM information_schema.tables WHERE table_schema = 'wp_105424' AND table_name LIKE 'shop%'");
$stmt->execute();
$tables = $stmt->get_result();
$dataStmt = $mysqli->prepare("SELECT name, html_id, price FROM " . implode(',', $tables)); // name, html_id, price should be in all tables that starts with *shop*
$dataStmt->execute();
$data = $dataStmt->get_result();

您可能需要添加条件才能处理所有情况。

答案 1 :(得分:0)

尽管我需要访问数组中的对象,但我从musafar那里得到的答案差不多。所以我使用了一些foreach循环来执行此操作,因为我不知道其他任何方式。如果还有另一种获取mysqli_object数据的方法,请告诉我。

$stmt = $mysqli->prepare("SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema = 'shop' AND table_name LIKE 'shop%'"); 

//table_schema is the database name and 'shop%' is the search string

$stmt->execute();
$tables = $stmt->get_result();
$stmt->close();

$arr = [];
foreach($tables as $tabless)
{
    $arr[] = $tabless;
}

foreach($arr as $arrs)
{
    $toby[] = implode(',',$arrs);   
}       

$tobyy = implode(' UNION SELECT name, html_id, price from ',$toby);

//$tobyy = "shop_a UNION SELECT name, html_id, price from shop_b"

$arr = [];  
$stmt = $mysqli->prepare("SELECT name, html_id, price FROM " . $tobyy); 
$result = $stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_assoc())
{
    $arr[] = $row;
}

$n=0;
$name = [];
foreach($arr as $arrs)
{
    $name[$n] = array(0 => $arrs['name'], 1 => $arrs['html_id'], 2 => $arrs['price']); //here
    $n++;
}
$stmt->close();

print_r($name);

//$name = "Array ( [0] => Array ( [0] => Chromecast [1] => chromecast [2] => 59 ) [1] => Array ( [0] => EZCast [1] => ezcast [2] => 49 ) )"