2011-01-20 7 views
4

私はこのmysqlクエリのPHP関数ですか?

$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"; 

ようになり、クエリを必要とするが、これは...任意のアイデアを失敗している私は、このクエリ

$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); 
} 

を持って

+3

すべてのユーザーに同じパスワードを設定しようとしている場合、coreywardが正しいことがわかります。 'user_password'がdbカラムで、複数の行を一度に操作しようとすると、PeterとJonahは正しいです。 –

答えて

4

あなたは2つのオプションだ: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); 
} 
+0

ストアドプロシージャは実際には移植性がありません。 – Jonah

+0

移植性が要求されている文章がありませんでしたか?それはWordPressデータベースのように見える - 私は、ネイティブで保存されたprocsは完全に実行可能であると思います。特に、一回の移行作業のように見えます。 –

+0

@Peter Bailey:良い点。コードがクラスをロードするので、まだ実行可能ではないかもしれません:潜在的に多くのコードを移植します。しかし、私はオプションとしてそれを提示することに害はないと思う。 – Jonah

1

更新:I thiあなたは何をしようとしているのか誤解していました(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"; 
+2

いいえ、それは彼が求めているものではありません。彼はMySQLがそのPHP関数を使ってカラムを選択し、その関数を使ってクエリを構築しないことを望んでいます。 –

2

:あなたはそれはあなたのクエリ文字列ではなく、列への参照として解釈されますように、それはあなたのクエリに挿入されたときに単一引用符でその関数呼び出しの結果をラップする必要が

クエリを2つのクエリに分割する必要があります。最初にSELECTクエリを実行し、取得したデータの適切な列で関数を実行し、最後にINSERTクエリを実行します。

ループ内で一度に1つの行(または複数の場合があります)を実行する必要があることに注意してください。テーブル全体をメモリにロードする必要はありません。

+1

これも実行可能ですが、データサイズが大きすぎる場合、メモリが不足します。私は個人的にこれをメモリライトの方法で行い、繰り返します - それはもっと時間がかかるかもしれませんが、必要かもしれません。 –

+0

ああ、私は彼がテーブル全体をやっていたことを理解していませんでした。編集中... – Jonah

2

できません。 MySQLはそのようにPHPに通信することはできません。有効なMySQL関数のみです。

これを反復処理するPHPスクリプトを作成する必要があります。

1

私はMySQLクエリを使用する簡単なPHP関数を作成しました。

すべてのクエリは1つの単純な関数で実行できます。

選択クエリの場合選択された引数は、選択された引数値を含む変数名として取得できます。

someuser 
    someemail 

:あなたは

<?php 

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



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

結果出力が可能になる "として" 置くことによって、独自の変数名を設定することができます

<?php 

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



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

または:元については

より多くの行数がある場合選出された、変数名は、元の配列 として作成されます。

<?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; 

     } 

?> 

またはあなたが置くことによって、独自の変数名を設定することができます

<?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>"; 

     } 

?> 

「と」結果の出力は次のようになります。 (ユーザーテーブルが3行の場合)

User1 4043 
User2 4048 
User3 4056 

mysql接続を作成するファイルの例: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の場合( - > contains q function) 次に、別のファイルにコードを含めると、

<?php 

include 'q.php'; 

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