Php 使用不同数据类型的许多值构建insert语句
我借用了这段代码,将字符串(用户、消息)作为数据库中的字符串输入shoutbox表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
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) {
...