0

Ref : Foreach loop declare variable on select table array

OK ..... No more syntax error

Same question

  • Is it possible to create variable inside foreach loop that each variable name depend on column name that I select?

I've coded out like

$recid = $_GET['recid'];
//sql select string declaration
$sql = "select [Rec_ID],[Bike_ID],[Station],['Line']
        from [rfttest].[dbo].[RFT_Records_Log]
        where [Rec_ID] = {$recid}";
$query = sqlsrv_query($conn,$sql); //query
//if query fail print out error
if($query === false)
{
    die(print_r(sqlsrv_errors(),true));
    sqlsrv_close($conn);
}
//continue with fetch array
$recdata = sqlsrv_fetch_array( $query, SQLSRV_FETCH_ASSOC);
//foreach to declare variable
foreach($recdata as $x => $a)
{
    $"$x" = $"$a";
}

Result should be

$Rec_ID = row rec_id data , 
$Bike_ID = row bike_id data, 
$Station = row station data, 
$Line = row line data

but i get these instead

$row rec_id data = row rec_id data , 
$row bike_id data = row bike_id data, 
$row station data = row station data, 
$row line data = row line data
Community
  • 1
  • 1

1 Answers1

1

You have two options.

One (the more secure one) is to use list():

list($Rec_ID, $Bike_ID, $Station, $Line) = $recdata;

This means that variable names can't overwrite variables by accident.

Two (the less secure one) is to use extract()

extract($recdata);

This turns an associative array into a number of variables, but by default will overwrite any variables with the same names that are set. This is the closest to what you're trying to do currently.

You can also pass a flag to extract to tell it not to overwrite existing variables (or to do a number of other things when there's a conflict).

extract($recdata, EXTR_SKIP);
samlev
  • 5,852
  • 1
  • 26
  • 38
  • what if i use `"SELECT *"` – Trin Pongtaman Aug 27 '15 at 01:26
  • imho that's bad practice (I like to know exactly what I'm getting back because a table schema change could break code if I ask for "whatever's there"). If you know what fields would be there, `list()` will still work fine, and if you don't know what's there, `extract` will also work (assuming that you fetched an associative array from the SQL data source). – samlev Aug 27 '15 at 01:52