在我的应用程序中,我有一个适用于多个用户的通用查询。 在某些情况下,用户之间的表结构可能不同。 我有一个查询,我只想将其应用于表中存在该列的用户。
function get_item($user_id) {
global $dbh;
$sth = $dbh->query ("SELECT item_type FROM items WHERE user_id = '$user_id'");
$row = $sth->fetch();
$item_type = $row['item_type'];
return $item_type;
}
如果我的表中不存在"item_type"列,我想忽略它,并将 $item_type 变量设置为 NULL。
对于这些用户,我在查询代码行上收到错误:
致命错误:未捕获的异常"PDOException",并显示消息 'SQLSTATE[42S22]:找不到列:1054 未知列"item_type" /item_display.php:5 中的"字段列表">
有什么想法吗?
我不知道
它是否对您有帮助,但您可以尝试一下:
if (count($dbh->query("SHOW COLUMNS FROM `items` LIKE 'item_type'")->fetchAll())) {
$sth = $dbh->query ("SELECT item_type FROM items WHERE user_id = '$user_id'");
$row = $sth->fetch();
$item_type = $row['item_type'];
} else {
$item_type = null;
}
它检查列是否存在并执行任务。
使用 SHOW COLUMNS 查询:
SHOW COLUMNS FROM <table> WHERE Field = '<column>'
如果返回一行,则该列存在。
您还可以让PDO抛出异常并捕获这些异常来解析MySQL错误。
/**
* Enable PDO exceptions.
* @see http://php.net/pdo.setattribute.php
*/
$pdoObject->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
try
{
$pdoStatement->execute();
}
catch( PDOException $e )
{
switch( $e->errorInfo[1] )
{
case 1062:
/* A PRIMARY or UNIQUE key is already assigned */
return false;
case 1054:
/* Column not found */
return false;
default:
/* some other PDO-error */
log_error($e->getMessage(), 'mysql');
return false;
}
}
希望这会有所帮助。
<?php
$link = mysql_connect($server, $username,$password);
if(!link))
{
exit('could not connect');
}
if(!mysql_select_db($database))
{
exit('could not select the database');
}
$sql="SELECT * FROM myrow WHERE mycolumn='".$columname."'";
$result=mysql_query($sql);
if(!$result){
if(mysql_errno($link)==1054){
//column does not exist
echo "<br />available";
}
}
elseif($nr= mysql_num_rows($result)){
if ($nr > 0){
//column exist
die('<br />name exists');
}
}
else
{
//column does not exist
echo "<br />available";
}
?>