0

私はこれに 2 日間取り組んできましたが、すべてを読みましたが、答えが得られませんでした。これを見てくれてありがとう!!!

いくつかのテーブルを結合するクエリがあり、探しているものが出力されます ここに私の選択があります

mysql_select_db($database_dbConnect, $dbConnect);
$query_rsMale = "SELECT  r.points, r.license, l.acaNo, l.firstName, l.lastName,   
l.cxage, l.cxcat,l.cxteam, l.city, l.state, l.gender     FROM rankingsM r INNER  
JOIN field f ON  r.license=f.USAC_No INNER JOIN racers l ON  l.usacNo=f.USAC_No
ORDER BY points";
$rsMale = mysql_query($query_rsMale, $dbConnect) or die(mysql_error());
$row_rsMale = mysql_fetch_assoc($rsMale);
$totalRows_rsMale = mysql_num_rows($rsMale);

echo "<br> This is num " . $totalRows_rsMale . "<br>";

これを他のページの csv ファイルにダウンロードしましたが、正常に動作します。次に、その配列を取得し、implode を使用して別の配列に配置します。

$newData = implode(",",$row_rsMale );
$newData = mysql_real_escape_string($newData);

echo "<br> This is newdata <br>". $newData;

これは、列が一致しないというエラーが発生する場所です。一致する列を確認し、データ型を確認しました。一致します。

 $insertSQL ="INSERT INTO ranking (points, usacNo, acaNo, firstName, lastName,
 cxage, cxcat, cxteam, city, state, gender)
 SELECT ( '$newData' )";

 $Result1 = mysql_query($insertSQL, $dbConnect) or die(mysql_error());

 echo "<br>Insert complete!<br>";

次に、列の表示を行いました

 $rankingSQL ="Select * from ranking";

 $result = mysql_query($rankingSQL, $dbConnect) or die(mysql_error());
echo "<table><tr>";
for($i = 0; $i < mysql_num_fields($result); $i++) {
$field_info = mysql_fetch_field($result, $i);
echo "<th>{$field_info->name},</th>";
}

これは私のウェブサイトの私のページに表示されているものです これは挿入前です これは num 22 です

これは新しいデータ 185.34,362355,4174,Shawn,Lortie,47,2,Rally Sport Cycling Team,BOULDER,CO,M points, usacNo, acaNo, firstName, lastName, cxage, cxcat, cxteam, city, state, gender, (読みやすくするために、列にコンマを追加しました。) 列数が行 1 の値数と一致しません。

` while ($l = mysql_fetch_array($result)) {

{
  $insertSQL = sprintf("INSERT INTO ranking (points, usacNo, acaNo, firstName,   
lastName, cxage, cxcat, cxteam, city, `state`, gender) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                   GetSQLValueString($l ['points'], "double"),
                   GetSQLValueString($l ['license'], "int"),
                   GetSQLValueString($l ['acaNo'], "int"),
                   GetSQLValueString($l ['firstName'], "text"),
                   GetSQLValueString($l ['lastName'], "text"),
                   GetSQLValueString($l ['cxage'], "int"),
                   GetSQLValueString($l ['cxcat'], "int"),
                   GetSQLValueString($l ['cxteam'], "text"),
                   GetSQLValueString($l ['city'], "text"),
                   GetSQLValueString($l ['state'], "text"),
                   GetSQLValueString($l ['gender'], "text"));

  $Result1 = mysql_query($insertSQL, $dbConnect) or die("<br>Error is " . mysql_error());
}`
4

1 に答える 1

0

問題は次のステートメントにあると思います。

$insertSQL ="INSERT INTO ranking (points, usacNo, acaNo, firstName, lastName,
                                  cxage, cxcat, cxteam, city, state, gender)
             SELECT ( '$newData' )";

php がこれをデータで展開すると、次の SQL ステートメントが作成されます。

INSERT INTO ranking (points, usacNo, acaNo, firstName, lastName,
                     cxage, cxcat, cxteam, city, state, gender)
SELECT ( '185.34,362355,4174,Shawn,Lortie,47,2,Rally Sport Cycling Team,BOULDER,CO,M' )

SELECT は 1 つのフィールドを返します。したがって、11 個のフィールドを持つ挿入ステートメントに 1 つのフィールドを入力すると、エラーが発生します。

インサートを正しく形成する必要があります。おそらく次のようなものです。

$newData = implode("','",$row_rsMale );
$insertSQL = "INSERT INTO ranking (...) VALUES ('$newData')";

これにより、次のようになります。

INSERT INTO ranking (...) VALUES ('185.34','362355','4174','Shawn','Lortie','47','2','Rally Sport Cycling Team','BOULDER','CO','M')

数値引数を引用符で囲むため、これは最適ではありませんが、データベースが変換を行う可能性があります。

CSVステップを実行する必要がない場合は、サブセレクトで挿入を行います。

INSERT INTO ranking (points, usacNo, acaNo, firstName, lastName,
                     cxage, cxcat, cxteam, city, state, gender) 
(SELECT  r.points, r.license, l.acaNo, l.firstName, l.lastName,
                     l.cxage, l.cxcat,l.cxteam, l.city, l.state, l.gender
FROM rankingsM r 
INNER JOIN field f ON r.license=f.USAC_No 
INNER JOIN racers l ON l.usacNo=f.USAC_No
ORDER BY points)

1 つの操作ですべてが実行され、挿入された行数が返されます。型のラングリングがなく、データベース/アプリの観点から非常に効率的です。すべてのデータを再度フィードするためだけに PHP に戻す必要がないからです。

于 2012-11-20T17:59:21.780 に答える