Php 对PDO的常规查询
我正试图让一个旧的PHP系统在我的新网站上运行。然而,为了让它工作,一切都必须使用PDO而不是常规的MySQL查询。我只是想让它变得有趣,我根本不是专家,只是在试验。然而,我似乎找不到解决问题的办法 我只是不断得到错误:致命错误:未捕获错误:调用成员函数query() 我已经用//错误行标记了这些行// 原始代码:Php 对PDO的常规查询,php,mysql,pdo,Php,Mysql,Pdo,我正试图让一个旧的PHP系统在我的新网站上运行。然而,为了让它工作,一切都必须使用PDO而不是常规的MySQL查询。我只是想让它变得有趣,我根本不是专家,只是在试验。然而,我似乎找不到解决问题的办法 我只是不断得到错误:致命错误:未捕获错误:调用成员函数query() 我已经用//错误行标记了这些行// 原始代码: <?php include("connect.php"); $day = $_GET['week']; if($_GET['week'] == "
<?php
include("connect.php");
$day = $_GET['week'];
if($_GET['week'] == ""){
$day = date("l");
$_GET['week'] = date("l");
}
$slot = mysql_fetch_array(mysql_query("SELECT * FROM rp_timetable WHERE day = '$day'"));
function outit($time, $num){
global $day, $slot;
$info = mysql_fetch_array(mysql_query("SELECT * FROM rp_users WHERE id = '".$slot[$num]."'"));
if($slot[$num] == ""){
$book[$num] = "OPEN SLOT";
}else{
$book[$num] = "<b>DJ ".$info['djname']."</b>";
}
if($num%2){
echo "<tr class='colour'><td width='150px' align='center'>$time</td><td width='150px' align='center'>".$book[$num]."<td></tr>";
}else{
echo "<tr><td width='150px' align='center'>$time</td><td width='150px' align='center'>".$book[$num]."<td></tr>";
}
}
echo "<div id='timetable_pub'><center>";
$result = mysql_query("SELECT sitename FROM rp_data");
while($row = mysql_fetch_assoc($result)) {
echo "<u>".$row['sitename']." Radio Timetable</u><p>";
}
echo "<h1>-You are currently viewing ";
echo "$day";
echo "'s timetable-</h1><p>";
echo "<a href='?week=Monday'>Monday</a> | <a href='?week=Tuesday'>Tuesday</a> | <a href='?week=Wednesday'>Wednesday</a> | <a href='?week=Thursday'>Thursday</a> |
<a href='?week=Friday'>Friday</a> |
<a href='?week=Saturday'>Saturday</a> | <a href='?week=Sunday'>Sunday</a><br><hr><br>
<table border='0' valign='middle' align='center'><tr>
<td width='150px' align='center'><u>Time</u></td>
<td width='150px' align='center'><u>DJ Booked</u><td></tr>";
outit('12:00 - 01:00 AM', 1);
$i = 2;
while($i <= 12){
$start_time = $i - 1;
$end_time = $i;
if(strlen($start_time) == 1){$start_time = "0".$start_time;}
if(strlen($end_time) == 1){$end_time = "0".$end_time;}
$full_time = "$start_time:00 - $end_time:00 AM";
outit($full_time, $i);
$i++;
}
outit('12:00 - 01:00 PM', 13);
$i = 14;
while($i <= 24){
$start_time = $i - 13;
$end_time = $i - 12;
if(strlen($start_time) == 1){$start_time = "0".$start_time;}
if(strlen($end_time) == 1){$end_time = "0".$end_time;}
$full_time = "$start_time:00 - $end_time:00 PM";
outit($full_time, $i);
$i++;
}
echo "</table>
</center><p></div>";
?>
我已经展示了一段使用pdo for php连接数据库的代码在您的例子中,$day不能直接在sql查询中传递,因为sql不接受该语法,希望它有助于理解
try {
$connect = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $connect->prepare("SELECT * FROM rp_timetable WHERE day =?");
$stmt->bindParam(1,$day,PDO::PARAM_STR);
$stmt->execute();
$response = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($response);
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$dbh
不在您的outit
功能范围内。您在哪里定义过$dbh
?你期望它是什么?为什么?@David可能是在connect.php中,它包含在top@anthony_718:不在产生错误的代码中,它不是。即使它被包括在内,这仍然不能回答它是什么或者为什么它应该有一个名为query
的方法。还有,你为什么在那里有die
?没用
try {
$connect = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $connect->prepare("SELECT * FROM rp_timetable WHERE day =?");
$stmt->bindParam(1,$day,PDO::PARAM_STR);
$stmt->execute();
$response = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($response);
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}