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

Php 使用不同数据类型的许多值构建insert语句,php,mysql,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(s

我借用了这段代码,将字符串(用户、消息)作为数据库中的字符串输入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”)。函数insertMessage现在将使用这些不同的POST值进行调用

   echo insertMessage(
       $_POST['drafting'], 
       $_POST['advocacy'], 
       $_POST['interview'],
       $_POST['letter'],
       $_POST['solicitor'],
       $_POST['barrister'],
       $_POST['instructor'],
       $_POST['secret']
   );
--起草、辩护、面试、信函、律师、大律师将以“tinyint”的身份进入数据库,并需要intval要求他们将其变为整数

--讲师和机密都以“字符串”的形式进入数据库

我的问题是

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


b) 有没有一种方法可以在不构建超长insert语句的情况下实现这一点

您不必对值调用
intval()
mysql\u real\u escape\u string()
也可以处理数字(请确保继续引用它们)。

您的函数接受2个参数,并将其输入8个参数?这是行不通的。

您可以使用这样一个简单的函数(或方法),它可以用于简单的插入。它将转义值并处理空值。但它不能处理函数(例如sha1(值)


PHP5.2.0+提供了一个可配置的帮助

<?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) {
   ...

函数将接受任意参数列表,即使只指定了两个参数。请参见
func\u get\u args()
@alex:当然,虽然不是他的特定实现。抱歉,第一部分中的代码是我借用的代码,我还没有更改参数的数量,但这是重点的一部分,我将在数据库中放入8,因此我希望使其更紧凑。目前只有2个参数,函数看起来有点凌乱…但是mysql_real_escape是否将字符串转换为整数?有没有一种方法可以紧凑地编写长insert语句?MySQL将强制您为列指定的任何数据类型(因此您可以为一个TINYINT列指定一个
'1'
),并且
MySQL
驱动程序将以字符串形式返回数据库中的所有内容。PHP程序员对MySQL的数据类型非常懒惰。@alex对此表示抱歉……在表单中,“起草、辩护、面试、信函、律师、律师”的值都是0或1,但从技术上讲它们是“字符串”,我将它们作为tinyint类型放入数据库中,所以我要把字符串1和0从形式转换成实际的整数。有道理?
<?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) {
   ...