0

我的代码从 MySQL 中的一行中获取多个字段,通过 mysql_fetch_array() 创建一个 MYSQL_ASSOC 数组,并将其格式化为 JSON 以返回浏览器中的 Javascript。这部分有效。我想另外插入一个 PHP 生成的变量及其值来描述时间。此变量存在一个字段,并且时间戳代码在另一个脚本中工作以插入原始第一篇文章的时间。在这个脚本中,我希望该值是第二个 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 );

两条评论: 1. 如您所见,查询仅返回 1 行。可能不需要while循环,但我不知道如何以其他方式进行。也可以解决问题的建议将不胜感激。2. 是的,我知道 mysql_ 系列命令已被弃用。我有其中的几个,我的下一个项目是将它们全部转换为 PDO,但目前,我对 PDO 的了解远少于这些东西。

4

2 回答 2

1

$rowmysql_real_escape_string()包含您需要的所有信息,并且仅当您输出到 mysql 数据库时才需要使用转义,因此只需执行以下操作:

if ($row = mysql_fetch_array( $fetch, MYSQL_ASSOC )) {
    $row['latestUpdateID'] = $latestUpdateID;
    echo json_encode( $row );
}

编辑:如果应该返回的不仅仅是该行:

if ($row = mysql_fetch_array( $fetch, MYSQL_ASSOC )) {
    $row['latestUpdateID'] = $latestUpdateID;
    $return_arr[] = $row;
}
echo json_encode( $return_arr );
于 2013-11-07T21:11:10.023 回答
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:单引号通常比字符串中的双引号快,需要intval来防止SQL注入,如果propertyID不是PK,通常限制1更快

于 2013-11-07T21:13:54.547 回答