使用许多不同数据类型的值构建一个insert语句

时间:2011-11-30 00:49:18

标签: php mysql

我借用了这个代码,它将字符串(用户,消息)作为数据库中的字符串输入到shoutbox表中

function insertMessage($user, $message){
    $query = sprintf("INSERT INTO shoutbox(user, message) VALUES('%s', '%s');",
        mysql_real_escape_string(strip_tags($user)),
        mysql_real_escape_string(strip_tags($message))
    );

但是,我正在更改数据并实际插入几种不同的数据类型(即在数据库中它们将是“strings”和“tinyint”)。现在将使用这些许多不同的_POST值调用函数insertMessage

   echo insertMessage(
       $_POST['drafting'], 
       $_POST['advocacy'], 
       $_POST['interview'],
       $_POST['letter'],
       $_POST['solicitor'],
       $_POST['barrister'],
       $_POST['instructor'],
       $_POST['secret']
   );

- 起草,宣传,访谈,信函,律师,律师作为“tinyint”进入数据库,并需要intval调用它们使它们成为整数

- 讲师和秘密都以“字符串”

进入数据库

我的问题是

a)如何在转义字符串的同时将tinyint数据(以及对其调用intval)与字符串混合

b)有没有办法在不构建超长插入语句的情况下执行此操作

4 个答案:

答案 0 :(得分:1)

您无需在值上调用intval()mysql_real_escape_string()也可以处理数字(请确保继续引用它们)。

答案 1 :(得分:1)

PHP 5.2.0+具有可配置的filter extension,可以提供帮助。

<?php

$sql_int = array(
  'filter'     => FILTER_SANITIZE_NUMBER_INT
);

$sql_string = array(
  'filter'     => FILTER_CALLBACK,
  'options'    => 'mysql_real_escape_string'
);

echo inputMessage(filter_input_array(INPUT_POST, array(
 'drafting'   => $sql_int,
 'advocacy'   => $sql_int,
 'interview'  => $sql_int,
 'letter'     => $sql_int,
 'solicitor'  => $sql_int,
 'barrister'  => $sql_int,
 'instructor' => $sql_string,
 'secret'     => $sql_string
)));

function inputMessage(array $input) {
   ...

答案 2 :(得分:0)

你的功能接受2个参数,你喂它8个?那不行。

答案 3 :(得分:0)

你可以使用这样的简单函数(或方法),它可以用于简单的插入。它将转义值并处理空值。它虽然无法处理函数(例如sha1(value))

<?php
function insertArray( $table, $data, $dbConn ) {
    $keys = array_keys( $data );

    foreach( $data as &$val ) {
        if( is_null( $val ) ) {
             $val = 'NULL';
        } else {
             $val = "'".mysql_real_escape_string( $val )."'";
        }
    }
    unset( $val );

    $sql = sprintf(
        'INSERT INTO `%s` (`%s`) VALUES (%s)',
        $table,
        implode( '`, `', $keys ),
        implode( ', ', $data )
    );

    //you probably want to handle errors here
    mysql_query( $sql, $dbConn );
    return mysql_insert_id( $dbConn );
}

//Example

$newId = insertArray(
    'my_table',
    array(
        'drafting'   => $_POST['drafting'], 
        'advocacy'   => $_POST['advocacy'], 
        'interview'  => $_POST['interview'],
        'letter'     => $_POST['letter'],
        'solicitor'  => $_POST['solicitor'],
        'barrister'  => $_POST['barrister'],
        'instructor' => $_POST['instructor'],
        'secret'     => $_POST['secret']
    ),
    $dbConnection
);