所以我第一次尝试AJAX而且我很激动!我有一个名为ajaxtest1.html的文件,它只有一个简单的文本框,其中输入里程,然后传递到另一个接收它的文件,将其插入查询并发回结果。这是ajaxtest1 ......
<html>
<body>
<script language="javascript" type="text/javascript">// <![CDATA[
function ajaxFunction(){
var ajaxRequest;
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
// receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
document.myForm.time.value = ajaxRequest.responseText;
}
}
var miles = document.getElementById('miles').value;
var queryString = "?miles=" + miles;
ajaxRequest.open("GET", "results.php" + queryString, true);
ajaxRequest.send(null);
}
// ]]></script>
<form name="myForm">Miles: <input id="miles" type="text" /> <br /> <br /> <input onclick="ajaxFunction()" value="Query MySQL" type="button" /></form>
</body>
</html>
然后,在results.php中。我有
<?php
$hostname = 'host';
$username = 'user';
$password = 'password';
$miles = $_GET['miles'];
try {
$dbh = new PDO("mysql:host=$hostname;dbname=ratetable", $username, $password);
echo 'Connected to database<br />';
$stmt = $dbh->prepare('SELECT * FROM rates WHERE mileage <= :miles ORDER BY mileage DESC LIMIT 1');
$stmt->bindParam(':miles', $miles, PDO::PARAM_INT);
if ($stmt->execute()) {
// get the rowcount
$numrows = $stmt->rowCount();
if ($numrows > 0) {
// match
// Fetch rows
$rowset = $stmt->fetchAll();
}
else {
// no rows
}
}
$display_string = "<table>";
$display_string .= "<tr>";
$display_string .= "<th>Mileage</th>";
$display_string .= "<th>Rate Per Mile</th>";
$display_string .= "<th>Inbound skid rate</th>";
$display_string .= "<th>Inbound truckload</th>";
$display_string .= "</tr>";
while($row_object = array($miles)){
$display_string .= "<tr>";
$display_string .= "<td>$row[mileage]</td>";
$display_string .= "<td>$row[ratepermile]</td>";
$display_string .= "<td>$row[skidinbound]</td>";
$display_string .= "<td>$row[truckinbound]</td>";
$display_string .= "</tr>";
}
echo "Query: " . $stmt . "<br />";
$display_string .= "</table>";
echo $display_string;
/*** close the database connection ***/
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
[增订]
我很擅长使用PDO(好吧,PHP一般而且我正在接受它。)
我收到以下错误:
Catchable fatal error: Object of class PDOStatement could not be converted to string
这发生在以下行:
echo "Query: " . $stmt . "<br />";
它正好连接数据库。有人可以告诉我可能有什么问题吗?在试图形成PDO语句时,我有点想法,因此它会处理我的查询,并且它在最后一点上窒息。
我已经更新了PHP代码,以向您展示我尝试过的内容。
感谢您一看。
答案 0 :(得分:0)
在results.php文件中尝试此操作:
$stmt = $dbh->prepare('SELECT * FROM rates WHERE mileage <= :miles ORDER BY mileage DESC LIMIT 1');
$stmt->bindParam(':miles', $miles, PDO::PARAM_INT);
你可以从这一行删除演员阵容:
$miles = (int) $_GET['miles'];
答案 1 :(得分:0)
“可捕获的致命错误:PDOStatement类的对象无法转换为字符串。”完全意味着它所说的。 $ stmt变量是一个PDO对象,你试图像它是一个字符串一样回应它。你不能回显一个对象,就像你不能只回显一个数组一样。
替换此行
$stmt = $dbh->prepare('SELECT * FROM rates WHERE mileage <= ? ORDER BY mileage DESC LIMIT 1');
有了这个:
$query_text = 'SELECT * FROM rates WHERE mileage <= ? ORDER BY mileage DESC LIMIT 1';
$stmt = $dbh->prepare($query_text);
然后替换此行
echo "Query: " . $stmt . "<br />";
有了这个
echo "Query: " . $query_text . "<br />";