PHP-如何在函数中使用数组?

PHP-如何在函数中使用数组?,php,mysql,arrays,string,Php,Mysql,Arrays,String,我从以下函数中获取返回的值数组: function get_subscribitions($user) { $user = mysql_real_escape_string ($user); $sql = "SELECT 'user_id' FROM `subscribe` WHERE subscriber = '$user'"; $result = mysql_query($sql); $rows = array(); while ($row = mysql_fetch_assoc($

我从以下函数中获取返回的值数组:

function get_subscribitions($user)
{

$user = mysql_real_escape_string ($user);
$sql = "SELECT 'user_id' FROM `subscribe` WHERE subscriber = '$user'";
$result = mysql_query($sql);
$rows = array();   
while ($row = mysql_fetch_assoc($result)) {
   $rows[] = $row;
}    
mysql_free_result($result); 
return $rows;
function get_text($writer) {
$writer = mysql_real_escape_string ($writer);
$sql = "SELECT * FROM `text` WHERE user_id='$writer' ORDER BY timestamp desc";
$result = mysql_query($sql);
$rows = array();
while ($row = mysql_fetch_assoc($result)) {
   $rows[] = $row;
}

mysql_free_result($result);
return $rows;
function get_text($writer)
{
    $sql = "SELECT * FROM `text` WHERE user_id in (".implode(',',$writer).") ORDER BY timestamp desc";
    $rows = array();
    if ($result = mysql_query($sql))
    {
        while ($row = mysql_fetch_assoc($result))
        {
            $rows[] = $row;
        }

        mysql_free_result($result);
    }    

    return $rows;
}
现在我想在一个新函数中使用这些值,其中每个“user_id”用于通过此函数从数据库中收集文本:

function get_subscribitions($user)
{

$user = mysql_real_escape_string ($user);
$sql = "SELECT 'user_id' FROM `subscribe` WHERE subscriber = '$user'";
$result = mysql_query($sql);
$rows = array();   
while ($row = mysql_fetch_assoc($result)) {
   $rows[] = $row;
}    
mysql_free_result($result); 
return $rows;
function get_text($writer) {
$writer = mysql_real_escape_string ($writer);
$sql = "SELECT * FROM `text` WHERE user_id='$writer' ORDER BY timestamp desc";
$result = mysql_query($sql);
$rows = array();
while ($row = mysql_fetch_assoc($result)) {
   $rows[] = $row;
}

mysql_free_result($result);
return $rows;
function get_text($writer)
{
    $sql = "SELECT * FROM `text` WHERE user_id in (".implode(',',$writer).") ORDER BY timestamp desc";
    $rows = array();
    if ($result = mysql_query($sql))
    {
        while ($row = mysql_fetch_assoc($result))
        {
            $rows[] = $row;
        }

        mysql_free_result($result);
    }    

    return $rows;
}
但是,第一个函数返回的值是一个数组,正如我所学到的,数组不能用“mysql\u real\u escape\u string”来处理

如何让第二个函数处理我从第一个函数得到的值

欢迎您的回复。
提前感谢。

解决方案是避免在第一个函数中的
$rows
数组中放置数组。而不是:

while ($row = mysql_fetch_assoc($result)) {
    $rows[] = $row;
}
尝试:


这将只在
$rows
数组中放置列“user\u id”中的值。

解决方案是避免在第一个函数中的
$rows
数组中放置数组。而不是:

while ($row = mysql_fetch_assoc($result)) {
    $rows[] = $row;
}
尝试:

这将只在
$rows
数组中放置“user\u id”列中的值。

使用:

string implode ( string $glue , array $pieces )
// example, elements separated by a comma :
$arrayasstring = impode(",", $myarray);
使用:


您的第一个错误是在仅选择一列时使用
mysql\u fetch\u assoc
。对此,您应该使用
mysql\u fetch\u row
。这可能会解决您的主要问题

可能是这样的:

$subs = get_subscribitions($whateverId);
$texts = get_text($subs);

function get_subscribitions($user)
{
    $user = mysql_real_escape_string ($user);
    $sql = "SELECT 'user_id' FROM `subscribe` WHERE subscriber = '$user'";
    $result = mysql_query($sql);
    $rows = array();

    while ($row = mysql_fetch_row($result)) {
        $user_id = $row['user_id'];
        $rows[$user_id] = $user_id;
    }
    mysql_free_result($result);
    return $rows;
}

function get_text($writer) {
    $writers = implode(",", $writer);
    $sql = "SELECT * FROM `text` WHERE user_id IN ({$writers}) ORDER BY timestamp DESC";
    $result = mysql_query($sql);
    $rows = array();

    while ($row = mysql_fetch_array($result)) {
        $rows[] = $row;
    }

    mysql_free_result($result);
    return $rows;
}

这将为您节省大量时间,因为您可以在一条语句中从
'text'
获取所有数据。

您的第一个错误是在仅选择一列时使用
mysql\u fetch\u assoc
。对此,您应该使用
mysql\u fetch\u row
。这可能会解决您的主要问题

可能是这样的:

$subs = get_subscribitions($whateverId);
$texts = get_text($subs);

function get_subscribitions($user)
{
    $user = mysql_real_escape_string ($user);
    $sql = "SELECT 'user_id' FROM `subscribe` WHERE subscriber = '$user'";
    $result = mysql_query($sql);
    $rows = array();

    while ($row = mysql_fetch_row($result)) {
        $user_id = $row['user_id'];
        $rows[$user_id] = $user_id;
    }
    mysql_free_result($result);
    return $rows;
}

function get_text($writer) {
    $writers = implode(",", $writer);
    $sql = "SELECT * FROM `text` WHERE user_id IN ({$writers}) ORDER BY timestamp DESC";
    $result = mysql_query($sql);
    $rows = array();

    while ($row = mysql_fetch_array($result)) {
        $rows[] = $row;
    }

    mysql_free_result($result);
    return $rows;
}

这将为您节省大量时间,因为您可以在一条语句中从
'text'
获取所有数据。

为了使用第二个函数,您必须迭代从第一个函数返回的数组。像这样的东西可能适合你:

$user_subscriptions = get_subscribitions($user);
foreach($user_subscriptions as $subscription) {
    $texts = get_text($subscription['user_id']);

    foreach($texts as $text) {
        // do something with the fetched text
    }
}

为了使用第二个函数,必须迭代从第一个函数返回的数组。像这样的东西可能适合你:

$user_subscriptions = get_subscribitions($user);
foreach($user_subscriptions as $subscription) {
    $texts = get_text($subscription['user_id']);

    foreach($texts as $text) {
        // do something with the fetched text
    }
}

正如乔治·康明斯所说

while ($row = mysql_fetch_assoc($result)) {
    $rows[] = $row['user_id'];
}
并且,为了加速第二个功能:

function get_subscribitions($user)
{

$user = mysql_real_escape_string ($user);
$sql = "SELECT 'user_id' FROM `subscribe` WHERE subscriber = '$user'";
$result = mysql_query($sql);
$rows = array();   
while ($row = mysql_fetch_assoc($result)) {
   $rows[] = $row;
}    
mysql_free_result($result); 
return $rows;
function get_text($writer) {
$writer = mysql_real_escape_string ($writer);
$sql = "SELECT * FROM `text` WHERE user_id='$writer' ORDER BY timestamp desc";
$result = mysql_query($sql);
$rows = array();
while ($row = mysql_fetch_assoc($result)) {
   $rows[] = $row;
}

mysql_free_result($result);
return $rows;
function get_text($writer)
{
    $sql = "SELECT * FROM `text` WHERE user_id in (".implode(',',$writer).") ORDER BY timestamp desc";
    $rows = array();
    if ($result = mysql_query($sql))
    {
        while ($row = mysql_fetch_assoc($result))
        {
            $rows[] = $row;
        }

        mysql_free_result($result);
    }    

    return $rows;
}

对查询的更改意味着您总共只执行一次,而不是为每个ID执行一次,从而消除了将查询发送到服务器并多次获得响应所需的时间。此外,如果查询失败,函数将返回一个空数组,正如George Cummins所说

while ($row = mysql_fetch_assoc($result)) {
    $rows[] = $row['user_id'];
}
function get_subscribitions($user)
{
  $user = mysql_real_escape_string ($user);
  $sql = "SELECT 'user_id' FROM `subscribe` WHERE subscriber = '$user'";
  $result = mysql_query($sql);
  $row = mysql_fetch_row($results);
  mysql_free_result($result);
  return intval($row['user_id']);
}
并且,为了加速第二个功能:

function get_subscribitions($user)
{

$user = mysql_real_escape_string ($user);
$sql = "SELECT 'user_id' FROM `subscribe` WHERE subscriber = '$user'";
$result = mysql_query($sql);
$rows = array();   
while ($row = mysql_fetch_assoc($result)) {
   $rows[] = $row;
}    
mysql_free_result($result); 
return $rows;
function get_text($writer) {
$writer = mysql_real_escape_string ($writer);
$sql = "SELECT * FROM `text` WHERE user_id='$writer' ORDER BY timestamp desc";
$result = mysql_query($sql);
$rows = array();
while ($row = mysql_fetch_assoc($result)) {
   $rows[] = $row;
}

mysql_free_result($result);
return $rows;
function get_text($writer)
{
    $sql = "SELECT * FROM `text` WHERE user_id in (".implode(',',$writer).") ORDER BY timestamp desc";
    $rows = array();
    if ($result = mysql_query($sql))
    {
        while ($row = mysql_fetch_assoc($result))
        {
            $rows[] = $row;
        }

        mysql_free_result($result);
    }    

    return $rows;
}
对查询的更改意味着您总共只执行一次,而不是为每个ID执行一次,从而消除了将查询发送到服务器并多次获得响应所需的时间。此外,如果查询失败,函数将返回一个空数组

function get_subscribitions($user)
{
  $user = mysql_real_escape_string ($user);
  $sql = "SELECT 'user_id' FROM `subscribe` WHERE subscriber = '$user'";
  $result = mysql_query($sql);
  $row = mysql_fetch_row($results);
  mysql_free_result($result);
  return intval($row['user_id']);
}
它只返回您可以在第二个函数中使用的用户id


它只返回您可以在第二个功能中使用的用户id

get\u text
应该一次使用一个用户id。因此,在数组上循环,并为每个项目调用一次
get_text
。@Jon您介意给我一个如何组成循环的例子吗?
get_text
应该一次使用一个用户id。因此,在数组上循环,并为每个项目调用一次
get_text
。@Jon你介意给我一个如何组成循环的例子吗?在我的示例中,这一行在哪里?总之,建议的代码中有错误。现在应该可以了。这是最好的解决方案。但是你必须在查询中转义数据。Change
$writers=内爆(“,”,$writer)
$writers=introde(“,”,数组映射('mysql\u real\u escape\u string',$writer))你已经准备好了。实际上你是对的,但在这种情况下不是真的。数据直接来自数据库,在再次发送到数据库之前无法对其进行操作。所以我觉得没有必要逃避它。您可以做的是
foreach($writer as$key=>$temp){$writer[$key]=(int)$temp;}
在执行
$writers=内爆(“,”,$writer)之前以确保$writer只保存整数值。在我的示例中,该行在哪里?无论如何,建议的代码中有错误。现在应该可以了。这是最好的解决方案。但是你必须在查询中转义数据。Change
$writers=内爆(“,”,$writer)
$writers=introde(“,”,数组映射('mysql\u real\u escape\u string',$writer))你已经准备好了。实际上你是对的,但在这种情况下不是真的。数据直接来自数据库,在再次发送到数据库之前无法对其进行操作。所以我觉得没有必要逃避它。您可以做的是
foreach($writer as$key=>$temp){$writer[$key]=(int)$temp;}
在执行
$writers=内爆(“,”,$writer)之前
以确保$writer只保存整数值。这是最好的解决方案。但您必须在查询中转义数据。Change
$writers=内爆(“,”,$writer)
$writers=introde(“,”,数组映射('mysql\u real\u escape\u string',$writer))并且您都设置好了。这是最好的解决方案。但是您必须在查询中转义数据。Change
$writers=内爆(“,”,$writer)
$writers=introde(“,”,数组映射('mysql\u real\u escape\u string',$writer))和您都设置好了。