使用if station&;获取记录;php函数中的pdo查询
我对函数pdo有问题,当它从数据库中获取1条记录时,结果为空 connect.php使用if station&;获取记录;php函数中的pdo查询,php,mysql,pdo,Php,Mysql,Pdo,我对函数pdo有问题,当它从数据库中获取1条记录时,结果为空 connect.php <?php class dbConn{ protected static $db; private function __construct() { try { self::$db = new PDO( 'mysql:host=localhost;dbname=item', 'root', '' ); self::$d
<?php
class dbConn{
protected static $db;
private function __construct() {
try {
self::$db = new PDO( 'mysql:host=localhost;dbname=item', 'root', '' );
self::$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch (PDOException $e) {
echo "Connection Error " . $e->getMessage();
}
}
public static function getConnection() {
if (!self::$db) {
new dbConn();
}
return self::$db;
}
}
?>
function.php
<?php
include 'connect.php';
class ajax_table {
function detailitem($table){
$db = dbConn::getConnection();
$sql = "select * from ".$table."" or die(mysql_error());
$q = $db->query($sql) or die("failed!");
$res = $q->fetch(PDO::FETCH_ASSOC);
return $res;
//else echo "No records found";
}
}
?>
展示
displayitem.php
<?php
$url = $_GET['url'];
$url=$url.'.html';
include 'connect.php';
include 'function.php';
$db = dbConn::getConnection();
$obj = new ajax_table();
$records = $obj->detailitem('product WHERE url = "$url"');
if($records){
echo $records['name'];
echo '<br>';
echo $records['type'];
}else{
echo 'no result';
} ?>
如果您在下一行正确看到:
$records = $obj->detailitem('product WHERE url = "$url"');
它将字符串作为“$url”传递,而不是$url
变量的值
因此,将其更改为:
$records = $obj->detailitem('product WHERE url = \''.$url.'\'');
为什么字符串赋值中有或die()
,为什么在使用PDO时调用mysql_error()
?第一个脚本名为connection.php
,但包括connect.php
。第二个sript名为t_function.php
,但包括function.php
。你确定你有所有正确的文件吗?barmar:很抱歉拼写错误,但我的调用文件是正确的,我改进了写作。为什么要使用or die()和调用mysql\u error,因为我太困惑了,而且我是新使用的PDO@RiskiFebriansyah变量在双引号内展开,但不在单引号内展开。您的另一个选择可能使用了双引号。感谢barmar和Fev,这是成功的,但我现在发现了致命错误“致命错误:未捕获异常'PDOException',消息'SQLSTATE[42S22]:Column not found:1054 line function.php$res=$q->fetch(PDO::fetch_ASSOC)中的'where子句'中的未知列'shoes';其中url的实际值为“/1234/shoes-small.html”。这表示“shoes”列“您的表中不存在..,您可以通过在mysql终端中键入DESC yourTableName
来检查该列是否存在。是的,在我的数据库表中没有列‘shoes’,‘shoes’是url列中的记录。accutaly'/1234/shoes small.html'@RiskiFebriansyah听起来好像你没有引用URL,所以它将shoes
作为列名而不是字符串。