2016-12-06 4 views
0

私はPHPでINSERT INTO SQLステートメントを使用しようとしています。最後の値($bands_bio)まですべてを正確に入力します。正しい情報を入力するのではなく、値を空白のままにします。私はすべてを見渡しており、構文エラーのようなものは見つけられないようです。あなたが見ることができるようにINSERT INTOステートメントは特定の値を正しく挿入しませんか?

$page_title = "Create a new band"; 

require ('includes/database.php'); 
require_once 'includes/bandsHeader.php'; 

$band_name = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'band_name', FILTER_SANITIZE_STRING))); 
$band_photo = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'band_photo', FILTER_SANITIZE_STRING))); 
$genre = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'genre', FILTER_SANITIZE_STRING))); 
$band_bio = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'band_bio', FILTER_SANITIZE_STRING))); 

echo $band_bio; 

if (($band_name === "") OR ($genre === "") OR ($band_photo === "") OR ($band_bio = "")) { 
    $errno = $conn->errno; 
    $errmsg = $conn->error; 
    echo "<div id='contentWrapper'>"; 
    echo "<div class='contentBox'>"; 
    echo "Insertion failed with: ($errno) $errmsg<br/>\n"; 
    echo "</div></div>"; 
    $conn->close(); 
    include 'includes/searchFooter.php'; 
    exit; 
} 

$albums = 0; 

$sql = "INSERT INTO bands VALUES (NULL, '$band_name', '$genre', '$albums', '$band_bio')"; 

$query = @$conn->query($sql); 

if (!$query) { 
    $errno = $conn->errno; 
    $errmsg = $conn->error; 
    echo "<div id='contentWrapper'>"; 
    echo "<div class='contentBox'>"; 
    echo "Insertion failed with: ($errno) $errmsg<br/>\n"; 
    echo "</div></div>"; 
    $conn->close(); 
    include 'includes/footer.php'; 
    exit; 
} 

、私はそれはそれはとてもそれは問題ではありませんでGETメソッドを使用して、私のフォームから正しい値を得ていたかどうかを確認するために、$band_bioをエコー。私のデータベースの私のbandsテーブルのband_bioという最後の列であるはずの最後の値まで、すべてを正しく挿入することは問題ありません。エラーも何も出力されません。これは、文字列データを変数から取り出して、情報を挿入する前にすべてのテキストを削除しているかのようです。

私はこのウェブサイトで数週間働いており、INSERT INTOステートメントを他のページと全く同じ方法で使用しています。これは本当に私を困らせた最初の事であり、私はそれを理解できません。どんな助けもありがとうございます。

+0

'bands'テーブルのddl(スキーマ)とは何ですか? – eggmatters

+0

可能であれば、あなたが挿入した+サンプル値はどのようなものか: – vuryss

+0

'$ bands_bio = "' ');本当の'" 'からバンドからの削除? – eggmatters

答えて

2

挿入するときは、pk(id)フィールドが自動インクリメントに設定されていることを確認してください。 このようにして、クエリをより詳細に制御できます。

$sql = "INSERT INTO bands " 
. "(`band_name`,`genre`,`numof_albums`,`band_bio`) " 
. "VALUES ('$band_name', '$genre', '$albums', '$band_bio')"; 

pkフィールドを指定しないと、INNODBは自動的にインクリメントして挿入します。

考えられるのは、挿入する列を指定するということです。 mysqlによる列の順序付けに頼っても問題ありませんが、あなたのケースでは何か問題があるかもしれません。

band_bioが「中止」される理由はありません。列の不一致エラーが発生します。

+0

ええ、プライマリキーが自動インクリメントに設定されています。それが主キーとforeign_key_idによる外部キーの関連付けに大きく依存しているため、私のウェブサイト全体が壊れてしまいます...私は誤って最初に誤って古いスキーマを含めました。正しいものが編集されました。 – Lefty

+0

私は私の答えを編集しました。上のクエリで成功しましたか? – eggmatters

+0

クエリを使用しようとしましたが、このエラーが返されました:挿入に失敗しました:(1064)SQL構文にエラーがあります。 MariaDBサーバーのバージョンに対応するマニュアルをチェックし、正しい構文が1行目で '0'付近で使用されるようにします。 – Lefty

0

完全に答えが見つかりました!実際、これは構文エラーでした。

if (($band_name === "") OR ($genre === "") OR ($band_photo === "") OR ($band_bio = "")) 

変数$band_bioは、私が誤って代入演算子はなく、比較演算子を使用するので、if文で空の文字列に割り当てられていました。正しいコードは$band_bio = ""ではなく$band_bio === ""である必要があります。

私は誓いますが、問題は、あなたが思うよりずっと簡単です。

関連する問題