質問

I've been trying this thing all day... I create a perfect sqk script (it works directly on PHP my Admin) and when I try to insert it using ALL possible ways (wpdb->query, mysql_db_query, wpdb->insert) it just won't do it..

here is my script, please help, I'm really desperate! :(

<?php
ini_set("display_errors",true);
include("wp-config.php");

$u = 1;// $_POST['id_user'];
$p = 103;//$_POST['id_project'];

$sql_questions = "select id, question, max_score FROM muci_questions";
$questions = qry($sql_questions,"array");

//$questions = mysql_db_query(DB_NAME,$sql_questions);

$newGradesSql ="";

for($i=0; $i<count($questions);$i++){
    $newGradesSql.=("INSERT INTO muci_answers (id_question, answer, id_user, id_project) VALUES ('".$questions[$i][0]."','".$questions[$i][2]."','".$u."','".$p."');");
}
echo $newGradesSql;
mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
mysql_db_query(DB_NAME,$newGradesSql);

//qry($newGradesSql,"none");

?>

The Function "qry" is a function inside the functions file on my wordpress theme and it works perfectly... the issue is that NO MATTER WHAT I use, it just doesn't insert the values in the table

Here is the function "qry"

function qry($sql, $retorno = "none"){
//mysql_query("SET NAMES utf8");
$result = mysql_db_query(DB_NAME,$sql);
switch ($retorno) {
case 'array':
    $array = array();
    if($result) {
        while ($row = mysql_fetch_array ($result, MYSQL_BOTH)) {
            array_push($array, $row);
        }
        mysql_free_result($result);
    }
    break;
case 'valor':
   $row = mysql_fetch_array ($result, MYSQL_BOTH);
       if($row)  {
           $array = mysql_result($result, 0);
           mysql_free_result($result);
       }
       else
           $array=null;
   break;
case 'insertId':
   $array = mysql_insert_id();
   break;
case 'none':
   $array = true;
   break;
}

return $array;

}

And the resulting MySQL is:

INSERT INTO muci_answers (id_question, answer, id_user, id_project) VALUES ('1','10','1','103');
INSERT INTO muci_answers (id_question, answer, id_user, id_project) VALUES ('2','10','1','103');
INSERT INTO muci_answers (id_question, answer, id_user, id_project) VALUES ('3','10','1','103');
INSERT INTO muci_answers (id_question, answer, id_user, id_project) VALUES ('4','10','1','103');
INSERT INTO muci_answers (id_question, answer, id_user, id_project) VALUES ('5','5','1','103');
INSERT INTO muci_answers (id_question, answer, id_user, id_project) VALUES ('6','5','1','103');
INSERT INTO muci_answers (id_question, answer, id_user, id_project) VALUES ('7','10','1','103');
INSERT INTO muci_answers (id_question, answer, id_user, id_project) VALUES ('8','10','1','103');
INSERT INTO muci_answers (id_question, answer, id_user, id_project) VALUES ('9','10','1','103');
INSERT INTO muci_answers (id_question, answer, id_user, id_project) VALUES ('10','10','1','103');
INSERT INTO muci_answers (id_question, answer, id_user, id_project) VALUES ('11','10','1','103');
INSERT INTO muci_answers (id_question, answer, id_user, id_project) VALUES ('12','10','1','103');
役に立ちましたか?

解決

The function mysql_db_query accept only a single statement. You should use multiple insert statement

INSERT INTO Table ( Column1, Column2 ) VALUES
( Value1, Value2 ), ( Value1, Value2 )

In your code like this

$newGradesSql ="INSERT INTO muci_answers (id_question, answer, id_user, id_project) VALUES ";

for($i=0; $i<count($questions);$i++){
    $newGradesSql.= ($i!=0) ? ",": "";
    $newGradesSql.="('".$questions[$i][0]."','".$questions[$i][2]."','".$u."','".$p."')";
}
echo $newGradesSql;
mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
mysql_db_query(DB_NAME,$newGradesSql);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top