MySQL bind_param writes NULL to table

Problem. Despite the fact that the array $settingshas (int) values ​​in them, MySQL writes NULLto the table when the value is 0 and 2.

For reference, each index in an array $settingsis an array of [0] = maxand [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 like to UPDATE 2/0/0 instead of null / null / null.

+4
source share
1 answer

Your array is populated as follows:

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

I hope that this question will be answered without the need for further explanation.


It will be fixed as follows:

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

Source: https://habr.com/ru/post/1610158/


All Articles