一个mysql查询里面的php函数?

时间:2011-01-20 18:17:48

标签: php mysql

我有这个查询

$query = "INSERT INTO $new_db.wp_users (user_login, user_pass, user_nicename)
select user_email, md5(user_password), user_name from $source_db.users";

我有这个功能

function wp_hash_password($password) {
    require_once('class-phpass.php');
    // By default, use the portable hash from phpass
    $wp_hasher = new PasswordHash(8, TRUE);
    return $wp_hasher->HashPassword($password);
}

我需要查询像这样

$query = "INSERT INTO $new_db.wp_users (user_login, user_pass, user_nicename)
select user_email, ". wp_hash_password(user_password) .", user_name from $source_db.users";

但这是失败的......任何想法

5 个答案:

答案 0 :(得分:4)

你有两个选择:

  • 在SQL / PL中重写wp_hash_password函数并在查询中使用它
  • 将结果加载到PHP - 使用以下代码修改并发送回来:
$results = mysql_query ( "SELECT user_login, user_pass, user_nicename FROM $source_db.users" );

while ($row = mysql_fetch_assoc($results)) {
  $sql = "$query = "INSERT INTO $new_db.wp_users (user_login, user_pass, user_nicename) VALUES ( ";
  $sql .= $row['user_login'] . ',';
  $sql .= wp_hash_password($row['user_password']) . ',';
  $sql .= $row['user_nicename;
  $sql .= ' ) ';
  mysql_query ( $sql );
} 

答案 1 :(得分:2)

您需要将查询拆分为两个查询。首先执行SELECT查询,在您获得的数据中的相应列上运行您的函数,然后最后运行INSERT查询。

请注意,您需要在循环中一次(或者可能是块)执行此操作;你不想把整个表加载到内存中。

答案 2 :(得分:2)

你做不到。 MySQL无法以这种方式与PHP通信。只有MySQL函数有效。

您必须编写一个PHP脚本,通过迭代执行此操作。

答案 3 :(得分:1)

更新:我想我误解了你要做的事情(感谢Peter Bailey指出来)。

当将函数调用的结果插入查询时,需要将该函数调用的结果包装在单引号中,以便在查询中将其解释为字符串,而不是对列的引用:

$query = "INSERT INTO $new_db.wp_users (user_login, user_pass, user_nicename)
select user_email, '" . wp_hash_password($user_password) . "', user_name from $source_db.users";

答案 4 :(得分:1)

我创建了一个简单的php函数来使用MySQL查询。

任何查询都可以在一个简单的函数中执行。

如果是选择查询,我们可以获取所选参数,因为变量名称包含所选参数值。

例如:

<?php

q("select user_name,email_id from users where user_id=48");



   echo $user_name;   echo "<br>";
   echo $email_id;
?>

您可以通过放置&#34;来设置自己的变量名称。 as&#34;

<?php

q("select user_name as uname, email_id as email from users where user_id=48");



   echo $uname;    echo "<br>";
   echo $email;
?>

结果输出将是:

  someuser
  someemail

如果选择了更多行,则变量名称将创建为数组 例如:

<?php

      q("select user_name,user_id from users");

      for($n=0;$n<count($user_name);$n++)
      {

            if(count($user_name)==1)  // if single row is selected
            {

                $username_val=$user_name;
                $user_ids=$user_id;


            }else{
                $username_val=$user_name[$n]; // for multiple rows selected

               $user_ids=$user_id[$n];
            }

             echo $username;

      }

?>

您可以通过放置&#34;来设置自己的变量名称。 as&#34;

<?php

      q("select user_name as un,user_id as uid from users");

      for($n=0;$n<count($user_name);$n++)
      {

            if(count($user_name)==1)  // if single row is selected
            {

                $username_val=$un;
                $user_ids=$uid;


            }else{
                $username_val=$un[$n]; // for multiple rows selected
                 $user_ids=$uid[$n];
            }

             echo $username_val; echo " "; 
             echo $user_ids; echo "<br>";

      }

?>

结果输出将是:(如果用户表有三行)

User1 4043
User2 4048
User3 4056

创建mysql连接文件ex:mysql_connect_file.php

<?php

$dbc=new mysqli('localhost', 'my_user', 'my_password', 'my_db');

?>

php功能低于

<?php

   require_once './mysql_connect_file.php';
function q($q)
       {

    $main_q=$q;
    $q=  strtolower($q);
      global $dbc;

              $temp=$q;
              $temp=str_replace(" ", "", $temp);
              $temp=  strtolower($temp);
         $temp=".$temp";
              if(strpos($temp, "update")==1 || strpos($temp, "insert")==1 || strpos($temp, "delete")==1 || strpos($temp, "alter")==1 || strpos($temp, "create")==1)
              {
                  $rd2=  mysqli_query($dbc,$main_q);
                  if($rd2)
                  {
                      return TRUE;
                  }
                  else{


       $mysql_err=  mysqli_error($dbc);

              $err=  debug_backtrace();
              $err_line=$err[0]['line'];
              $err_file=$err[0]['file'];
        echo  "<font color='black'>Error at <b>$err_file on line $err_line  </b>query --></font><font color='maroon'>$main_q</font> (<font color='red'> $mysql_err </font> )";

        return FALSE;

                  }

              }elseif(strpos($temp, "select")==1){


     $qn=  str_replace("select ", "", $q);

     $qn=substr($qn,0,  strpos($qn, " from"));
     $qn="$qn,";

       $selc=  str_replace("`","", $qn);
       $qn=  str_replace("`","", $qn);
       $my_var=array();

      $my_nm=array();
       for($m=1;$m<=substr_count($selc, ',');$m++)
       {
              $my_nm[$m]=substr($qn,0,  strpos($qn, ","));

              $qn=substr($qn,strpos($qn, ",")+1, strlen($qn));
              if(strpos($my_nm[$m]," as ")>0)
              {
      $my_var[$m]=  str_replace(" as ", "~", $my_nm[$m]);
      $my_var[$m]=  str_replace(" ", "", $my_var[$m]);


      $my_var[$m]=substr($my_var[$m],strpos($my_var[$m],"~")+1,strlen($my_var[$m]));
              }else
              {
  $my_var[$m]=substr($my_nm[$m],0,  strlen($my_nm[$m]));  
  $my_var[$m]=  str_replace(" ","", $my_var[$m]);
              }

       }

       $rn=mysqli_query($dbc, $main_q);

       if($rn)
      {

              if(mysqli_num_rows($rn)>0)
              {       

               for($t=1;$t<=count($my_var);$t++)
             {

          $$my_var[$t]=array();


             }


    while($row=mysqli_fetch_array($rn,MYSQLI_ASSOC))
    {

           if(mysqli_num_rows($rn)>1)
           {


              for($t=1;$t<=count($my_var);$t++)
             {

             ${$my_var[$t]}[]=$row[$my_var[$t]];
    }

     }else{

             for($t=1;$t<=count($my_var);$t++)
             {
    $$my_var[$t]=$row[$my_var[$t]];

             }


           }
    }

  if(mysqli_num_rows($rn)>1)
  {
     for($t=1;$t<=count($my_var);$t++)
             {
     $GLOBALS[$my_var[$t]]= sel_mr($my_var,$$my_var[$t]);


             }   


             for($t=1;$t<=count($my_var);$t++)
             {
     return $$my_var[$t];


             }
  }
  if(mysqli_num_rows($rn)==1)
  {

              for($t=1;$t<=count($my_var);$t++)
             {
     $GLOBALS[$my_var[$t]]=$$my_var[$t];

             }
             for($t=1;$t<=count($my_var);$t++)
             {
     return $$my_var[$t];

             }

  }



              }else
              {

       for($t=1;$t<=count($my_var);$t++)
             {
     $GLOBALS[$my_var[$t]]=NULL;

             }



             for($t=1;$t<=count($my_var);$t++)
             {
     return $my_var[$t];


             }

              }

      }else
      {

             for($t=1;$t<=count($my_var);$t++)
             {
     $my=  mysqli_error($dbc);
     if($t==1)
     {
            $err=  debug_backtrace();
            $err_line=$err[0]['line'];
            $err_file=$err[0]['file'];
      echo  "<font color='#ef0000'>Error at <b>$err_file on line $err_line  </b>query --></font><font color='maroon'>$q</font> (<font color='red'> $my </font> )";

     }


             }



             for($t=1;$t<=count($my_var);$t++)
             {
     for($p=0;$p<count($$my_var[$t]);$p++)
     {
            $a=$$my_var[$t];
            return $a;    
     }


             }

      }
              }


       }
     function sel_mr($a,$ab)
     {
            for($t=1;$t<=count($a);$t++)
            {
      foreach ($ab as $my)
      {

             ${$a[$t]}[]=$my;

      }
            }

            for($t=1;$t<=count($a);$t++)
            { 
      return $$a[$t];
            }


     } 

?>

注意:

您可以将此代码保存到文件中,然后可以通过包含该文件名

来调用此函数

例如:如果你的文件名是q.php( - &gt;包含q函数) 然后你可以通过包含

将代码用于其他文件
<?php

include 'q.php';

  q("select user_name from users where user_id=4048");
   echo $user_name; 
?>