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)

内破は値の配列を文字列に変換し、各値を','

内破コードの前後には引用符もあり、すべての値を でラップして、'すべての値が文字列であるように見せます

しかし、octern のよう'に、データベースで正しいデータ型が選択されている場合に整数値をラップしていても、クエリが失敗する理由がわかりません。

于 2012-07-15T01:28:33.953 に答える
1

文字列の周りにクォートを使用したいが、整数やブール値の周りには使用したくない場合は、ここで 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 に答える