在查询中传递拆分值

时间:2011-09-07 20:42:43

标签: php

< ? php

$array = array('name1', 'name2', 'name3');
$comma_separated = implode(",", $array);

echo $comma_separated;

mysql_query("INSERT INTO  uploadfile(UF_ID,UF_NAME,GENRE,CAT_ID,SUB_CAT_ID,TAG,DESCRIPTION)             VALUES('mysql_insert_id()','$comma_separated','$GENRE','1','1','$tag','$optionaldescription')") ? >
  1. 如何通过查询发送这些值。
  2. 我形成查询的方式很好。

2 个答案:

答案 0 :(得分:2)

我会做以下事情:

<?php

$array = array('name1', 'name2', 'name3');

$first=true;
$comma='';
$comma_separated='';
foreach($array as $value)
{
    if($first)
    {
        $first=false;
        $comma=',';
    }
    $comma_separated .= $comma.mysql_real_escape_string($value);
}

$result =mysql_query("INSERT INTO uploadfile (UF_ID,UF_NAME,GENRE,CAT_ID,SUB_CAT_ID,TAG,DESCRIPTION) VALUES('".mysql_insert_id()."','{$comma_separated}','".mysql_real_escape_string($GENRE)."','1','1','".mysql_real_escape_string($tag)."','".mysql_real_escape_string($optionaldescription)."');");
if(!$result)
{
    die( mysql_error() );
}

?>

注意mysql_real_escape_string()的使用;此函数转义SQL的输入并保护您的SQL注入。此外,如果您之前已经转义了值*,我建议您在SQL查询字符串中使用插值。像这样:

"'1', '1', '{$tag}'" 

"'1', '1', '$tag'" 

请注意,我已经更改了mysql_insert_id()的使用方式。出于同样的原因。


* - 就像我使用$comma_separated

一样

答案 1 :(得分:0)

这很容易被SQL injection攻击。请改用PDOprepared statements

$st = $pdo->prepare("INSERT INTO " .
         "uploadfile(UF_NAME,GENRE,CAT_ID,SUB_CAT_ID,TAG,DESCRIPTION) " .
         "VALUES(?,?,'1','1',?,?)");
$st->execute();

您无需指定主要自动编号密钥的ID。