Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将PHP变量的值推送到mysql\u fetch\u数组创建的数组中_Php - Fatal编程技术网

将PHP变量的值推送到mysql\u fetch\u数组创建的数组中

将PHP变量的值推送到mysql\u fetch\u数组创建的数组中,php,Php,我的代码从MySQL中的一行获取多个字段,通过MySQL_fetch_数组生成一个MySQL_ASSOC数组,并将其格式化为JSON以在浏览器中返回Javascript。这部分是有效的。我想另外插入一个PHP生成的变量及其值来描述时间。此变量存在一个字段,时间戳代码在另一个脚本中工作,以插入原始第一篇文章的时间。在这个脚本中,我希望该值是第二个PHP更新脚本运行的时间,而不是数据库中的原始时间值。尽管我做了很多努力,但最后一部分还是没法用。以下是相关代码: $timeStamp = date("

我的代码从MySQL中的一行获取多个字段,通过MySQL_fetch_数组生成一个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_uu系列的命令已被弃用。我有几个,我的下一个项目是将它们全部转换为PDO,但目前,我对PDO的理解比这东西少得多。

$row包含您需要的所有信息,使用mysql进行转义只有在输出到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 );

据我所知,您需要将$latestUpdateId放入return\u 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\u escape或mysql\u real\u escape函数,因为您不是在向数据库中写入,而是在从数据库中读取


ps:字符串中的单引号通常比双引号快,需要intval来防止SQL注入,如果propertyID不是PK,则限制1通常更快

在for循环中调用mysql\u real\u escape\u字符串的目的是什么?这显然是没有必要的,如果您将其作为JSON发送,则可能会对您的数据表单有害。json_encode将处理所有正确的编码。$propertyFields是否有数字键或字符串键?我看你是两全其美。别忘了在$return_arr上附加$row,这是一个包含多行的数组。@MichaelBerkowski你可能是对的,有点不清楚echo中是否返回了更多内容,将进行编辑…谢谢你,jeroen,你用Michael Berkowski的输入编辑的版本非常有用。也要感谢迈克尔B。它的代码非常简单,所以我认为下一步可以将其转换为PDO。我对mysql\u real\u escape\u string的进一步想法感兴趣。我已经读到,人们应该在数据库的入站和出站中使用它,以防数据库被恶意代码入侵,然后被发送到用户的浏览器。你对被黑客入侵和从数据库出站的场景有什么想法?@Mike_Laird No,你应该总是对输出到的媒体进行转义/编码,因此如果你将浏览器输出到html,你就使用htmlspecialchars,而不使用sql函数。我尝试了你对$fetch的重述,但PHP脚本不起作用。在查看时,我怀疑单引号和双引号存在问题。我将修补它。感谢您的安全思想。Ilya,我使用的PHP语法是$fetch=mysql\u querySELECT$fields\u sql FROM residence WHERE propertyID='.int$propertyID.'LIMIT 1;我理解int的安全角色将变量限制为整数。我知道限制只允许1个响应。但在这种情况下,我没有限制的安全角色。在试图进行SQL注入时,它能防止什么?@Mike_Laird limit 1通常更快,如果propertyID不是PK,这与安全无关