0

I am collecting a lot of data-strings from a MySql database. The data has to be used on various different places on my website. So I would like for each string collected from my database to be assigned to its own variable. I don't want to write the same piece of code over and over again. Therefore, I want to use an array in order to collect all the strings and create specific variables in the process. Below is what I have.

    $tableName = "fruits";
    $variablesArray = array(
                    "Apple",            
                    "Banana",   
                    "Coconut",          
    );

    foreach($variablesArray as $val) {
      $query = "SELECT * FROM {$tableName} WHERE ID = '{$val}'";
      $result = mysqli_query($conn, $query) or die('error');
      while($data = mysqli_fetch_array($result)) {
        For ($n = 0; $n < 1; $n++){
          ${'$val'} = $data["COLORS"];
        }
      }
      echo ${'$val'};
      echo "</br>";
    }        

In the above, I am using the ID's of the database in the array to collects the data from my database. This echoes "Green", "Yellow", "Brown".

What I would like however, is to make three variables:

  • $Apple = "Green"
  • $Banana = "Yellow"
  • $Coconut = "Brown"

The above code doesn't create these. I am unsure of how to use the ${'$val'} in order to achieve this. I have tried creating associative arrays as well, but I was not able to get what I wanted. I was hoping someone here could point me in the right direction. Thanks!

4
  • 1
    Does your table contain string ID? Commented Jul 28, 2017 at 14:35
  • 2
    You should create a class that loads those variables. Then you can inject the same class instance (which already have loaded the variables in instantiation) where ever you need it, instead of cluttering the global scope with a bunch of variables. Commented Jul 28, 2017 at 14:35
  • 1
    User Double doller. $$val = $data["COLORS"]; and echo $$val Commented Jul 28, 2017 at 14:36
  • why don't you get all the values in one select (with `where ID in('Apple','Banana',..)? Commented Jul 28, 2017 at 14:48

1 Answer 1

1

Your problem (not necessarily the only one) lies in ${'$val'};

Single quote strings will not parse variables, so your variable is quite literally called '$val'

Use $$val

${"$val"}; would also be valid as double quote strings do parse variables. In simple cases like this however, it is unnecessary to use the quotes, as $val is already a string, and unnecessary to use the curly braces, as there are no other parts of the string you want to separate the variable from.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.