すべてのセッションをプルダウンしてローカルデータベースに追加するAPIへの接続があります。mysqli_executeが実行されていない状態で実行中の機能
私はmysqliを使い始めたばかりですが、多分私は何かを見逃しています。 APIはイベントを正しく引き出しており、dbへの接続が正常に機能しているので、firstPull($client, $mysqli)
と呼ぶとDBに正常に書き込むことさえできます。
しかし、firstPull()
を実行した後でデータベースを調べると、各セッションがテーブルに2回書き込まれました。いくつかのデバッグの後、私はそれがsaveSessionToDB()
機能の中で起こっていたことに気づいた。一旦私がmysqli_stmt_execute($stmt);
をコメントアウトすると、一度だけそれらを書きました。しかし、実際に文を実行するのはそのメソッドではありませんか?私の混乱はどこから来ているのですか。パラメータをバインドするときに文が実行されるのはなぜですか?
firstPull()
とsaveSessionToDB()
の両方は、session-func.php
と呼ばれるファイルの中にあり、データベースとAPIの両方の機能を使用するすべての機能が格納されています。内部にmysqli_stmt_execute()
メソッドを使用する他の関数はありません。
というファイルの中で、関数firstPull()
がajax関数を使用して呼び出されているため、管理コントロールページのボタンを押すと実行できます。このファイルの中に、私は以下が含まれます:以下
include './db.php'; // Database connection and functions include './cvent-api.php'; // API connection and functions include './session-func.php'; // API and DB functions
firstPull()
と
saveSessionToDB()
です。
function firstPull($client, $mysqli)
{
$mysqlivar = $mysqli;
$JSONresult = json_decode(json_encode(retrieveSessions($client)), true);
$allSessions = $JSONresult[RetrieveResult][CvObject][ProductDetail];
$y = count($allSessions) - 1;
for ($x = 0; $x <= $y; $x++) {
$pattern = "/([A-Z][0-9])\s\-\s(.)+/";
$hasSessionCode = preg_match($pattern, $allSessions[$x][ProductName], $matches);
if ($matches) {
$sessCode = $matches[1];
} else {
$sessCode = "Nil";
};
$session = array(
"id" => $allSessions[$x][ProductId],
"sesscode" => $sessCode,
"name" => $allSessions[$x][ProductName],
"desc" => strip_tags($allSessions[$x][ProductDescription]),
"starttime" => $allSessions[$x][StartTime],
"endtime" => $allSessions[$x][EndTime]
);
saveSessionToDB($mysqlivar, $session);
}
echo "Sessions have been pulled down successfully";
closeDB($mysqli);
}
function saveSessionToDB($mysqli, $session)
{
if (!$mysqli) {
echo "Connect failed: %s\n" . mysqli_connect_error() ."";
exit();
}
$id= $session['id'];
$sanitized_id = mysqli_real_escape_string($mysqli, $id);
$sesscode= $session['sesscode'];
$sanitized_sesscode = mysqli_real_escape_string($mysqli, $sesscode);
$name = $session['name'];
$sanitized_name = mysqli_real_escape_string($mysqli, $name);
$desc = $session['desc'];
$sanitized_desc = mysqli_real_escape_string($mysqli, $desc);
$starttime = $session['starttime'];
$sanitized_starttime = mysqli_real_escape_string($mysqli, $starttime);
$endtime = $session['endtime'];
$sanitized_endtime = mysqli_real_escape_string($mysqli, $endtime);
$stmt = mysqli_prepare($mysqli, "INSERT INTO sessions (id, sessioncode ,name, description, starttime, endtime) VALUES (?,?,?,?,?,?)");
if (!$stmt) {
die('mysqli error: '.mysqli_error($mysqli));
}
/* bind parameters statement */
mysqli_stmt_bind_param($stmt, 'ssssss', $sanitized_id, $sanitized_sesscode, $sanitized_name, $sanitized_desc, $sanitized_starttime, $sanitized_endtime);
if (!mysqli_execute($stmt)) {
die('stmt error: '.mysqli_stmt_error($stmt));
}
/* execute the statement */
// mysqli_stmt_execute($stmt);
/* close statement*/
mysqli_stmt_close($stmt);
}
これらを合計します。 mysqli_stmt_execute($stmt);
がsaveSessionToDB()
関数でコメントアウトされていると、私のステートメントが実行されるのはなぜですか?あなたがもう細部を必要とするかどうか私に教えてください!
まあ、総理にかなっています!私は 'if(!mysqli_execute($ stmt)){'を 'if(!mysqli_stmt_execute($ stmt)){'に変更して、それをもう一度見逃さないようにしました。 –
いいアイデア!私は通常mysqliを使用しませんので、実際には答えになる前に同じものであることを確認するためにドキュメントに行く必要がありました。ほとんどの 'mysqli_stmt_'関数は' mysqli_'エイリアスを持っているようです。 –