从PHP发送可变长度数据到SQL表是否有更好的方法?

时间:2015-06-14 04:14:20

标签: php mysql

我有一个JSON字符串从JS / AJAX进入PHP文件。条目数是动态的,范围从6到30。

我按照以下方式填充数组

$myarray = array();
$dataLength= count($decodedJSON['make'][0]['model'][0]['color']);
for ($x = 0; $x < $dataLength*2; $x+=2) {
    $myarray[$x] = $decodedJSON['make'][0]['model'][0]['color'][$x/2]['int'];
    $myarray[$x+1] = $decodedJSON['make'][0]['model'][0]['color'][$x/2]['ext'];
}
for ($x = $dataLength*2; $x < 30; $x++) {
    $myarray[$x] = 0;
}

所以这基本上给了我一个用零填充的数组,前面有我的数据。

现在,我想将其插入到具有最大列数

的SQL表中
$sql = "INSERT INTO cars VALUES ( '$dataLength', '$myarray[0]', '$myarray[1]', '$myarray[2]', '$myarray[3]', '$myarray[4]', '$myarray[5]', '$myarray[6]', '$myarray[7]', '$myarray[8]', '$myarray[9]', '$myarray[10]', '$myarray[11]', '$myarray[12]', '$myarray[13]', '$myarray[14]', '$myarray[15]', '$myarray[16]', '$myarray[17]', '$myarray[18]', '$myarray[19]', '$myarray[20]', '$myarray[21]', '$myarray[22]', '$myarray[23]', '$myarray[24]', '$myarray[25]', '$myarray[26]', '$myarray[27]', '$myarray[28]', '$myarray[29]', 42)";

但我认为必须有更好的方法???

感谢您的帮助, HSC。

2 个答案:

答案 0 :(得分:0)

为什么在声明时不用数字填充数组;然后你可以保存最后一个循环:

$myarray =array_fill(0,30,0);

答案 1 :(得分:0)

如果你使用的是PDO,你可以这么简单:

try { 
    $pdo = new PDO('mysql:host=' . $host . ';dbname=' . $database, $user, $pass,  array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ));
}catch(PDOException $e) {
    echo 'Could not connect to database: ' . $e->getMessage();
    exit;
}   

$sql = 'INSERT INTO cars VALUES ('.implode(',',array_fill(0,30,'?')).')';
$values = array_fill(0,30, null);   
/** populate array with data here ... **/

$stmt = $pdo->prepare($sql);
try {
    $stmt->execute($values);
}catch(PDOException $e) {
    die($e->getMessage());
}

这里的旁注,如果您可以确定执行插入需要哪些列会更好,您可以更改JSON以使列与值匹配。通过这种方式,您可以防止始终必须定义30列的开销,并且您可以为列分配默认值