【问题标题】:Operand should contain 1 column mysql php [duplicate]操作数应包含 1 列 mysql php [重复]
【发布时间】:2011-12-27 10:24:22
【问题描述】:

操作数应包含 1 列

我的代码有什么问题,这意味着 AND 我尝试通过选择插入到activitynote表中

<?php
   require_once('Connections/Thaymay.php');
   mysql_select_db($database_Thaymay, $Thaymay);   
   $activityid = $_POST['select'];

  if($_POST) {
    foreach($_POST['namebox'] as $check) {

            echo "$check \n "; 
            echo "<br> ";


            $query_ReSeActi = " INSERT INTO `ph3`.`activitynote` ( `idmemberref`, `idactivity`, `manaferid`, `staffinput`) select ( 
            idmemberref,    $activityid,    manaferid,  'system'  ) from activitynote where id = $check ;    ";
            $RsActivitynoteMem = mysql_query($query_ReSeActi, $Thaymay) or die(mysql_error());

    }
}



?>

【问题讨论】:

  • 你不仅容易受到SQL注入攻击,甚至没有检查$_POST['select']中是否有任何数据,而是直接在查询中盲目使用它。显然,它没有任何价值。
  • 学习使用mysql_real_escape_string,见:stackoverflow.com/questions/332365/…

标签: php mysql mysql-error-1241


【解决方案1】:
<?php
   require_once('Connections/Thaymay.php');
   mysql_select_db($database_Thaymay, $Thaymay);

   $activityid = $_POST['select'];

  if($_POST) {
    foreach($_POST['namebox'] as $check) {


            echo "$check \n "; 
            echo "<br> ";


            $query_ReSeActi = "
INSERT INTO `ph3`.`activitynote` 
( `idmemberref`
, `idactivity`
, `manaferid`
, `staffinput`
, `dateadd`
)
SELECT
  idmemberref
, $activityid
, manaferid
, 'system'
, NOW() 
FROM activitynote 
WHERE id = $check
"
;

$RsActivitynoteMem = mysql_query($query_ReSeActi, $Thaymay) or die(mysql_error());
    }
}
echo "<br><br> ";
echo $_POST['select'];



?>

【讨论】:

    【解决方案2】:

    如果您期望 $_POST['namebox'] 有多个值,您可能希望在一个查询中而不是在循环中完成所有操作(一般来说,如果您可以保存到数据库的行程,则应该作为往返行程到数据库通常是相当昂贵的操作)。像这样的东西可能会起作用,对您的 POST 输入进行一些额外的清理:

    $idArray = array();  
    if($_POST) {
      if( is_array( $_POST['namebox'] ) ) {
         foreach($_POST['namebox'] as $check) {
           $cleanCheck = intval( $check );
           if( $check > 0 ) {
              $idArray[] = $check;
           }
         }
      }
      $query_ReSeActi = " INSERT INTO `ph3`.`activitynote` ( `idmemberref`, `idactivity`, `manaferid`, `staffinput`) select ( 
            idmemberref,    $activityid,    manaferid,  'system'  ) from activitynote where id IN (" . implode( ',', $idArray ) . ") ;    ";
            $RsActivitynoteMem = mysql_query($query_ReSeActi, $Thaymay) or die(mysql_error());
    
    }
    

    这假定您的 $_POST['namebox'] 将整数 ID 传递给您的脚本。

    【讨论】:

    • IN (" . implode( ',', $idArray ) . ")";
    • 操作数应包含 1 列
    • 创建表activity (idactivity int(11) NOT NULL AUTO_INCREMENT, activitydate datetime NOT NULL, activityname varchar(30) DEFAULT NULL, group varchar(25) DEFAULT NULL, ActDEsc varchar(255) DEFAULT NULL, dateadd datetime DEFAULT NULL, timestamp timestamp NULL 默认NULL 更新 CURRENT_TIMESTAMP, PRIMARY KEY (idactivity) ) ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=utf /跨度>
    • @user1040364 抱歉,我遗漏了一些括号。我已经相应地编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2012-11-26
    • 2012-12-12
    • 1970-01-01
    相关资源
    最近更新 更多