-2
我在学习如何将我的数据库查询转换为PDO。有人告诉我,将我的查询一个如下...这个PDO查询有什么问题?
$stmt = $db->prepare("SELECT P.URL, P.Title, P.Subtitle, P.MetaTitle, P.MetaDesc, P.KW, P.Site, P.Live, PB.Common, PB.First, PB.Middle, PB.Last, PB.Prefix, PB.Suffix, PB.Alpha, PB.Born, PB.Died, PB.Birth_Place, PB.Death_Place, PB.Nationality, PC.URL, PC.Class, Brf.URL, Brf.Site, Brf.Brief, ART.Article PXA
FROM people P
LEFT JOIN people_1_bio PB ON PB.URL = P.URL
LEFT JOIN people_1_class PC ON PC.URL = P.URL
LEFT JOIN people_briefs Brf ON Brf.URL = P.URL
LEFT JOIN people_articles_px ART ON ART.URL = P.URL
WHERE P.Site = 'PX' AND Brf.Site = 'PX' AND PB.Alpha LIKE ? AND Brf.Brief !='' AND PC.URL = P.URL AND P.Live = 1
GROUP BY P.URL ORDER BY P.N");
$stmt->execute(array($MyURL.'%'));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
它更多的用户比大多数的我在教程看到的例子友好的 - 但它不工作。它抛出两个错误消息:
说明:未定义变量:分贝在/用户/ ...上线118
致命错误:调用一个成员函数准备()非对象上在/用户/ ......上线118
它们对应于这条线......
$stmt = $db->prepare("ELECT P.URL, P.Title, P.Subtitle, P.MetaTitle, P.MetaDesc, P.KW, P.Site, P.Live,
我发现问几个StackOverflow的讨论同样的问题,但我不明白的答案。一个讨论说你必须使用这个例子创建一个“$ db对象”:
$db = new mysqli("localhost", "username", "password", "database")
但是,我正在使用MySQL。我尝试将mysqli更改为mysql,但它不起作用。
另一个讨论说我需要粘贴我上面的查询如下:
function confirmIPAddress($value) {
global $db
要使其工作,我一定要在末尾添加一个分号,然后把一个右括号我的查询后。但它不起作用。我认为PDO应该是用户友好的,但它甚至不会与旧的方法相比。
这是我原来的查询:
$res = mysql_query ("SELECT P.URL, P.Title, P.Subtitle, P.MetaTitle, P.MetaDesc, P.KW, P.Site, P.Live, PB.Common, PB.First, PB.Middle, PB.Last, PB.Prefix, PB.Suffix, PB.Alpha, PB.Born, PB.Died, PB.Birth_Place, PB.Death_Place, PB.Nationality, PC.URL, group_concat(PC.Class), Brf.URL, Brf.Site, Brf.Brief, ART.Article PXA
FROM people P
LEFT JOIN people_1_bio PB ON PB.URL = P.URL
LEFT JOIN people_1_class PC ON PC.URL = P.URL
LEFT JOIN people_briefs Brf ON Brf.URL = P.URL
LEFT JOIN people_articles_px ART ON ART.URL = P.URL
WHERE P.Site = 'PX' AND Brf.Site = 'PX' AND PB.Alpha LIKE '$MyURL%' AND Brf.Brief !='' AND PC.URL = P.URL AND P.Live = 1
GROUP BY P.URL ORDER BY P.N") or die (mysql_error());
'$ stmt = $ db-> prepare(“ELEC”是否仅在问题中存在拼写错误,还是代码中存在错误?) – hammus
所以请发布代码,因为您现在正在围绕查询。错误消息意味着'$ db'不在范围内,如果这发生在函数内部,那么您必须将'$ db'作为参数传递给函数(首选)或全局访问它(不是首选) –
需要将$ db声明为新的PDO – Jompper