と の準備済みステートメントに少し問題がPHP
ありMySQLi
ます。私のコードはPOST
データを受け取り、ステートメントを準備してから、POST データをクエリにバインドします。この後、一見エラーなしで実行されますが、データベースの変更が発生しないため、ステートメントが正しく実行されないことは明らかです。
私の問題の簡単な概要:
- MySQLi と準備済みステートメントを使用しています。
- 準備済みステートメントを使用していなかった以前の PHP/MySQLi コードを更新しました。
- 更新後、 で問題が発生しました
$query->execute()
。
コード:
if($query = $this->mysqli->prepare("UPDATE article SET copy = ?, title = ?, alias = ?, description = ?, category = ?, category_id = ?, author = ?, permission = ?, mode = ?, comments = ?, revised = ?, frequency = ?, priority = ? WHERE id = ?"))
{
if
(
$query->bind_param
(
"sssssdsssssssd",
$_POST['edit_article'],
$_POST['edit_title'],
$_POST['edit_alias'],
$_POST['edit_description'],
$_POST['edit_category'],
$result['id'],
$_POST['edit_author'],
$_POST['edit_permission'],
$_POST['edit_mode'],
$_POST['edit_comments'],
$date_time,
$_POST['edit_frequency'],
$_POST['edit_priority'],
$id
)
)
{
if($query->execute())
{
echo $this->mysqli->error; // does nothing.
// These statements print to the screen successfully with the correct values.
echo $_POST['edit_frequency'] . "<br />";
echo $_POST['edit_priority'] . "<br />";
//$_SESSION['article_edited'] = true;
// die;
//exit(header("Location: " . __MANAGER__ . $_POST['edit_alias']));
}
else
{
$_SESSION['article_edited'] = false;
exit(header("Location: " . __MANAGER__ . $_POST['edit_alias']));
}
}
}
else
{
$_SESSION['article_edited'] = false;
exit(header("Location: " . __MANAGER__ . $_POST['edit_alias']));
}
このコードをデバッグするためのより良い方法を説明できる人はいますか? execute()
関数が機能するかどうかを確認if($query->execute())
して成功したので、私には意味がありません。もちろん、問題が実行機能にあるのではなく、他の場所にあると仮定します。POST データは次のように検証されるため、問題になることはありません。
if
(
$_POST['foo'] && isset($_POST['foo']) &&
$_POST['bar'] && isset($_POST['bar'])
)
{
// Statements.
}
私は無知です。
編集
コードを更新するときに追加した 2 つの特定の POST 変数の値をエコーすることに注意してください。それ以来、機能しなくなりました。print_r($_POST)
また、私が使用したこと、およびすべての POST 変数が設定され、値が含まれていることにも注意してください。