0

我有使用函数将数据插入到我的 sql 中。数据是

function mysql_insert($table, $arr){
if($arr!=''){
    $values = array_map('mysql_real_escape_string', array_values($arr));
    $keys = array_keys($arr);
    $q=('INSERT INTO `'.$table.'` (`'.implode('`,`', $keys).'`) VALUES (\''.implode('\',\'', $values).'\')');
    //$res = mysql_query($q)OR die(mysql_error());
    return $q;
}else{
    return false;
}

数据和查询来自:

if($crud=='insert'){
$field= array(  'col1' => 'apel',
        'c0l2' => 'box1',
        'col3' => 200,//integer Quantity
    );
$data=mysql_insert('wh',$field);}echo json_encode($data);

结果是 = "INSERT INTO wh( col1, c0l2, col3) VALUES ('apel','box1','200')" col3 的值为字符串。我需要 col3 作为整数。这段代码有什么问题?

4

3 回答 3

3

在以下代码中:

implode('\',\'', $values)

内爆将值数组转换为字符串,将每个值分开','

并且在 implode 代码之前和之后,还有引号,它将包含所有值,'使其看起来像所有值都是字符串

但是像 octern 我不明白为什么查询会失败,即使您使用整数值包装,'如果在数据库中选择了正确的数据类型,它应该可以正常工作

于 2012-07-15T01:28:33.953 回答
1

如果您仍想在字符串周围使用 quates,但不想在整数或布尔值周围使用,请尝试此处的 php 函数json_encode() 示例:http: //codepad.org/Hpvzjnjc

于 2013-01-08T09:26:51.693 回答
0

发生这种情况是因为命令implode('\',\'', $values)告诉它将数组$values转换为字符串,每个元素之间有单引号和逗号。如果您不想在数字周围加上引号,则需要使用更具体的函数对 $values 进行迭代。

然而,这实际上并不重要。如果你给 MySQL 一个包含数字字段的数字的字符串,它只会将它转换为适当类型的数字。你可以保持原样,一切都应该工作。

于 2012-07-15T01:30:02.907 回答