1

初めて 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 コードを更新して、私が試したことを示します。

ご覧いただきありがとうございます。

4

2 に答える 2

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 />";
于 2013-01-11T15:59:36.963 に答える
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'];
于 2013-01-10T20:00:59.767 に答える