0

I'm writing a PHP application, and one of the features is be able to query gene interactions in all our tables (gene_r, genes_newL_dn, genes_newL_up, genes_oldL_up, genes_oldL_dn). So I have the following PHP function to query all those databases at once.

public function getAllInteractions($input){
    $data = array();

    $sql_list = (
        "SELECT * FROM genes_r JOIN drugs_r ON drugs_r.id = genes_r.id WHERE drug_name='$input' OR gene_name='$input'",
        "SELECT * FROM genes_newL_dn JOIN drugs_newL_dn ON drugs_newL_dn.id = genes_newL_dn WHERE drug_name='$input' OR gene_name='$input'",
        "SELECT * FROM genes_newL_up JOIN drugs_newL_up ON drugs_newL_up.id = genes_newL_up WHERE drug_name='$input' OR gene_name='$input'",
        "SELECT * FROM genes_oldL_dn JOIN drugs_oldL_dn ON drugs_oldL_dn.id = genes_oldL_dn WHERE drug_name='$input' OR gene_name='$input'",
        "SELECT * FROM genes_oldL_up JOIN drugs_oldL_up ON drugs_oldL_up.id = genes_oldL_up WHERE drug_name='$input' OR gene_name='$input'"
    );

    foreach($sql_list as $sql){
        $query = $this->db->query($sql);
        // case 1 : SQL Query invalid / empty results
        if(!$query || $query->num_rows() == 0) {
            continue;   
        }
        else {
            $id = $query->row()->id;
            $sql = "SELECT interaction from matrix_r WHERE id='$id'";
            $query = $this->db->query($sql);
            array_push($data, $query->row());
        }   
    }

    return $data;
}

However, I'm getting the following error:

PHP Parse error:  syntax error, unexpected ',' in 
/chemicalgenomics/ci/application/models/search_model.php on line 81

I'm not getting why does not like the ','. It's supposed to be an array of strings. Could someone please help me with that? Thanks

PS: Line 81 is the first line in the array: "SELECT * FROM ...

0

2 Answers 2

5

You initialize the array wrong, you need to place the array at the begining:

$sql_list = array(
    "SELECT * FROM genes_r JOIN drugs_r ON drugs_r.id = genes_r.id WHERE drug_name='$input' OR gene_name='$input'",
    "SELECT * FROM genes_newL_dn JOIN drugs_newL_dn ON drugs_newL_dn.id = genes_newL_dn WHERE drug_name='$input' OR gene_name='$input'",
    "SELECT * FROM genes_newL_up JOIN drugs_newL_up ON drugs_newL_up.id = genes_newL_up WHERE drug_name='$input' OR gene_name='$input'",
    "SELECT * FROM genes_oldL_dn JOIN drugs_oldL_dn ON drugs_oldL_dn.id = genes_oldL_dn WHERE drug_name='$input' OR gene_name='$input'",
    "SELECT * FROM genes_oldL_up JOIN drugs_oldL_up ON drugs_oldL_up.id = genes_oldL_up WHERE drug_name='$input' OR gene_name='$input'"
);

If you have PHP 5.4 or greater (not that many web hosts do however), you can use the new short array syntax which you were close to, but the character is a bracket ([) rather than a parenthesis (():

$sql_list = [
    "SELECT ...",
    "SELECT ...",
];
Sign up to request clarification or add additional context in comments.

Comments

1

$sql_list = array(x, y, z); is the right syntax for PHP arrays. So, in your code, it should be:

$sql_list = array(
    "SELECT * FROM genes_r JOIN drugs_r ON drugs_r.id = genes_r.id WHERE drug_name='$input' OR gene_name='$input'",
    "SELECT * FROM genes_newL_dn JOIN drugs_newL_dn ON drugs_newL_dn.id = genes_newL_dn WHERE drug_name='$input' OR gene_name='$input'",
    "SELECT * FROM genes_newL_up JOIN drugs_newL_up ON drugs_newL_up.id = genes_newL_up WHERE drug_name='$input' OR gene_name='$input'",
    "SELECT * FROM genes_oldL_dn JOIN drugs_oldL_dn ON drugs_oldL_dn.id = genes_oldL_dn WHERE drug_name='$input' OR gene_name='$input'",
    "SELECT * FROM genes_oldL_up JOIN drugs_oldL_up ON drugs_oldL_up.id = genes_oldL_up WHERE drug_name='$input' OR gene_name='$input'"
);

If you are using PHP 5.4, there's shortened syntax available:

$sql_list = [
    "SELECT * FROM genes_r JOIN drugs_r ON drugs_r.id = genes_r.id WHERE drug_name='$input' OR gene_name='$input'",
    "SELECT * FROM genes_newL_dn JOIN drugs_newL_dn ON drugs_newL_dn.id = genes_newL_dn WHERE drug_name='$input' OR gene_name='$input'",
    "SELECT * FROM genes_newL_up JOIN drugs_newL_up ON drugs_newL_up.id = genes_newL_up WHERE drug_name='$input' OR gene_name='$input'",
    "SELECT * FROM genes_oldL_dn JOIN drugs_oldL_dn ON drugs_oldL_dn.id = genes_oldL_dn WHERE drug_name='$input' OR gene_name='$input'",
    "SELECT * FROM genes_oldL_up JOIN drugs_oldL_up ON drugs_oldL_up.id = genes_oldL_up WHERE drug_name='$input' OR gene_name='$input'"
];

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.