0

私のコードは、MySQL の行からいくつかのフィールドをフェッチし、mysql_fetch_array() を介して MYSQL_ASSOC 配列を作成し、それを JSON にフォーマットしてブラウザの Javascript に返します。この部分は機能します。時間を記述するために、PHP で生成された変数とその値を追加で挿入したいと考えています。この変数にはフィールドが存在し、タイムスタンプ コードは別のスクリプトで機能して、元の最初の投稿の時刻を挿入します。このスクリプトでは、値を、データベース内の元の時間値ではなく、2 番目の PHP 更新スクリプトが実行される時間にしたいと考えています。多くの試みにもかかわらず、私はこの最後の部分を機能させることができません。関連するコードは次のとおりです。

$timeStamp = date("Ymd");
$userIP = $_SERVER['REMOTE_ADDR'];
$postingID = "$timeStamp-$userIP-u";
$latestUpdateID = str_replace(".", "", "$postingID")

//some pre-processing to make $fields_sql, an array to use in the SELECT

$fetch = mysql_query("SELECT $fields_sql FROM residence WHERE propertyID = '$propertyID'");
if( mysql_num_rows( $fetch ) ){
    while ( $row = mysql_fetch_array( $fetch, MYSQL_ASSOC ) ){
        for( $i = 0; $i < count( $propertyFields ); $i++ ) {
            $row_array[ $propertyFields[$i] ] = mysql_real_escape_string( $row[ $propertyFields[$i] ] );
        }
        array_push( $return_arr,$row_array ); 
        //get [{"city":"Rochester","streetAddress":"100 Main", etc.}]
    }
    $propertyFields[ 'latestUpdateID' ] = $latestUpdateID; //get "latestUpdateID":""
    array_push( $return_arr,$propertyFields[ 'latestUpdateID' ] ); //pushed in but no value
//want [{"city":"Rochester","streetAddress":"100 Main", "latestUpdateID":"20131107", etc.}]
} else { die('<li class=error>Ooops</li> }

echo json_encode( $return_arr );

2 つのコメント: 1. ご覧のとおり、クエリは 1 行しか返しません。while ループはおそらく必要ありませんが、他の方法でそれを行う方法がわかりません。問題を解決する提案も二重に高く評価されます。2. はい、mysql_ ファミリーのコマンドが非推奨であることは知っています。私はこれらのいくつかを持っており、次のプロジェクトはそれらすべてを PDO に変換することですが、現時点では、PDO はこのようなものよりもはるかに理解していません。

4

2 に答える 2

0

$latestUpdateId を return_arr に入れる必要があることを理解している限り、次のコードを確認してください。

$fetch = mysql_query('SELECT '.$fields_sql.' FROM `residence` WHERE `propertyID`='.intval(propertyID, 10).' limit 1'); // note intval and limit 1
if( $row = mysql_fetch_array( $fetch, MYSQL_ASSOC ) ) {
    $row['latestUpdateID'] = $latestUpdateID;
    echo json_encode( $row );
}
else { die('<li class=error>Ooops</li>'); }

注: mysql_escape または mysql_real_escape 関数を使用する必要はありません。データベースに書き込むのではなく、データベースから読み取るためです。

ps: 通常、一重引用符は文字列内の二重引用符よりも高速です。SQL インジェクションを防ぐために intval が必要であり、propertyID が PK でない場合は通常 1 を制限すると高速になります。

于 2013-11-07T21:13:54.547 に答える