C. Finke
C. Finke

Reputation: 129

MySQL bind_param writes NULL to table

Problem: Even though my $settings array has values (int) in them, MySQL writes NULL into the table both when the value is 0 and 2.

For reference, each index in the $settings array is an array of [0] = max and [1] = min.

public function updateAdaptiveArmour($gameid, $shipid, $settings){

    foreach ($settings as $key => $value){
        debug::log($key." ".$value[0]." ".$value[1]);

       //just to show the contents
       //   [561103190304f][2015-10-04 12:44:41] particle 4 2 
       //   [56110319035b3][2015-10-04 12:44:41] laser 0 0 
       //   [56110319035b3][2015-10-04 12:44:41] molecular 0 0 
    }   


    try {
        if ($stmt = $this->connection->prepare(
                "UPDATE 
                    tac_adaptivearmour
                 SET
                    particlealloc = ?,
                    laseralloc = ?,
                    molecularalloc = ?
                 WHERE 
                    gameid = ?
                    AND shipid = ?
                 "
        ))
        {
            $stmt->bind_param('iiiii', $settings[0][1], $settings[1][1],  $settings[2][1], $gameid, $shipid);
            $stmt->execute();
            $stmt->close();
        }
    }
    catch(Exception $e) {

        throw $e;
    }
}

Ideally, for this example, I would want to UPDATE to 2 / 0 / 0 instead of null / null / null.

Upvotes: 4

Views: 70

Answers (1)

hjpotter92
hjpotter92

Reputation: 80639

Your array is populated as follows:

$settings = [
    'particle' => [4, 2],
    'laser' => [0, 0],
    'molecular' => [0, 0]
];

I hope that answers the question without needing to further explain it.


It will be fixed as follows:

$stmt->bind_param('iiiii',
    $settings['particle'][1],
    $settings['laser'][1],
    $settings['molecular'][1],
    $gameid,
    $shipid
);

Upvotes: 1

Related Questions