大家好,我们决定开始学习PDO。但是我无法创建一个函数来检查我的数据库中是否存在表。
每个单独的项目都有自己的表格,表格名称为($ id)。
<?php
include_once('config.php');
include_once('simple_html_dom.php');
$html = file_get_html('http://localhost:8888/CDOnline%20Online.html');
foreach($html->find('div.product-stamp-inner') as $content) {
$detail['itemid'] = $content->find('a',0)->href;
$detail['itemid'] = substr($detail['itemid'], 40, 6);
if (strpos($detail['itemid'], "?") !== false) {
$detail['itemid'] = substr($detail['itemid'], 0, 5);
}
$id = $detail['itemid'];
tableExists($dbh, $id);
}
function tableExists($dbh, $id)
{
//check if table exists
}
$dbh = null;
?>
我试图搜索论坛以寻找答案,但空手而归。让我接近我答案的唯一一件事就是:
function tableExists($dbh, $id)
{
$results = $dbh->query("SHOW TABLE LIKE `$id`");
if(count($results)>0){echo 'table exists';}
}
但是这只是说所有表都存在,当一半的表不存在时。
编辑:如果有1行或更多行,表格应该存在。
答案 0 :(得分:12)
你正在$id
周围使用背叛。将其更改为单引号。像这样:
"SHOW TABLES LIKE '$id'"
进一步注意,声明count($results)>0
不起作用。您必须改为使用$results->rowCount()
。
Fxing这两个错误都会给你以下功能:
function tableExists($dbh, $id)
{
$results = $dbh->query("SHOW TABLES LIKE '$id'");
if(!$results) {
die(print_r($dbh->errorInfo(), TRUE));
}
if($results->rowCount()>0){echo 'table exists';}
}
答案 1 :(得分:2)
SHOW TABLES...
是 MySQL 方言,并且会在几乎任何其他数据库引擎下失败。这当然不是便携式表检测的明确答案。
最接近便携式的可能是检查SELECT * FROM $table
是否会产生错误,
或类似的方法here
如果您只需要创建一个表,如果它不存在,您可以使用:
CREATE TABLE IF NOT EXISTS $table ($field, ...)
如果您的数据库位于Windows MySQL服务器上,您可能希望将表格命名为 小写 以解决this bug。
答案 2 :(得分:1)
如果有人来寻找这个问题,这个帖子很简单。虽然它得到了一点回答。
if ($con->query(
"SHOW TABLES LIKE '" . $table . "'"
)->rowCount() > 0
or die("No table set")
){
有了这个我只是将其他条件推入或。而对于我的需求,我只需要死。虽然你可以设置或其他东西。有些人可能更喜欢if / else if / else。然后删除或然后提供if / else if / else。
或者,如果我要重做该功能:
function tableExists($dbh, $id){
if ($dbh->query(
"SHOW TABLES LIKE '" . $id . "'"
)->rowCount() > 0
or die(print_r($dbh->errorInfo(), TRUE))
){
echo 'table exists';
}
}
没有测试重做,虽然它应该和我之前使用过的代码一样。刚刚起作用。
答案 3 :(得分:0)
这似乎是最简单的方法。您将此函数传递给包含已创建的pdo对象的数组。
$db['pdo']=new PDO('mysqlconnectiongoeshere');
$db['table']='tabletobechecked';
function is_table($db){
$is_table=$db['pdo']->query("SHOW TABLES LIKE '".$db['table']."'");
return$is_table->rowCount();
}
这样,如果表存在,这个函数会返回一个&#39; 1&#39;如果它不存在,则此函数返回&#39; 0&#39 ;;
所以你可以像这样使用它:
if(is_table($db)){
echo"The table".$db['table']." exists.";
}else{
echo"The table".$db['table']." does not exist.";
}
答案 4 :(得分:-1)
private function doesTableExist($table)
{
try {
$this->db->query("DESC $table");
} catch (Exception $e) {
return false;
}
return true;
}
答案 5 :(得分:-1)
只需使用良好的旧行计数即可。如果表存在,必须有一个结果。
$sql ="SELECT count(*) FROM [table name]";
$sql_result = $this->db_mssql->prepare($sql);
$sql_result->execute();
$sql_result->setFetchMode(PDO::FETCH_ASSOC);
$my_res = $sql_result->fetchAll();
if($my_res){
echo 'table exists';
}