私はPHPの初心者ですが、これは正常ではないと思います。
私のコードは常に次の行でブロックされています:
$insert = 'INSERT INTO boleia VALUES ('.$nick.', '.$data_format.', '.$custo.', '.$dest_origem.', '.$dest_destino.', NULL, '.$matricula.');';
二重引用符を使用し、それらの二重引用符内の変数を使用してみましたが、何もありませんでした。
何か案が?
私はPHPの初心者ですが、これは正常ではないと思います。
私のコードは常に次の行でブロックされています:
$insert = 'INSERT INTO boleia VALUES ('.$nick.', '.$data_format.', '.$custo.', '.$dest_origem.', '.$dest_destino.', NULL, '.$matricula.');';
二重引用符を使用し、それらの二重引用符内の変数を使用してみましたが、何もありませんでした。
何か案が?
PHPコードは構文的に正しいですが、値を区切るために引用符を使用していないため、生成されたSQLは正しくありません。
あなたはこれを行うことができます:
$insert = 'INSERT INTO boleia VALUES ("'.$nick.'", "'.$data_format.'", "'.$custo.'", "'.$dest_origem.'", "'.$dest_destino.'", NULL, "'.$matricula.'");';
またはこれ:
$insert = "INSERT INTO boleia VALUES ('".$nick."', '".$data_format."', '".$custo."', '".$dest_origem."', '".$dest_destino."', NULL, '".$matricula."');';
これを行うこともできます:
$insert = "INSERT INTO boleia VALUES ('$nick', '$data_format', '$custo', '$dest_origem', '$dest_destino', NULL, '$matricula');";
ただし、 SQLインジェクションに対して脆弱であるため、その方法は推奨されません。
たとえば、PostgreSQLを使用しているため、DBに適切な関数を使用して値をエスケープする必要がないようにするには、すべての値にpg_escape_string()を使用する必要があります。
$insert = 'INSERT INTO boleia VALUES ("'.pg_escape_string($nick).'", "'.pg_escape_string($data_format).'", "'.pg_escape_string($custo).'", "'.pg_escape_string($dest_origem).'", "'.pg_escape_string($dest_destino).'", NULL, "'.pg_escape_string($matricula).'");';
もう1つの方法は、pg_prepare()をpg_execute()とともに使用することです。
pg_prepare($dbconn, "my_insert", 'INSERT INTO boleia VALUES ($1, $2, $3, $4, $5, NULL, $6);');
pg_execute($dbconn, "my_insert", array($nick, $data_format, $custo, $dest_origem, $dest_destino, $matricula));
または、pg_query_params()を使用することもできます
pg_query_params($dbconn, 'INSERT INTO boleia VALUES ($1, $2, $3, $4, $5, NULL, $6);',
array($nick, $data_format, $custo, $dest_origem, $dest_destino, $matricula));
挿入クエリの各値は、数値またはNULLでない限り、その前後に引用符が必要です。
$insert = "INSERT INTO boleia VALUES ('$nick', '$data_format', '$custo', '$dest_origem', '$dest_destino', NULL, '$matricula');";
PDOを使用する場合は、引用符やエスケープについて心配する必要はありません。
このPDOチュートリアルの例:
$stmt = $db->prepare("INSERT INTO table(field1,field2,field3) VALUES(:field1,:field2,:field3)");
$stmt->execute(array(':field1' => $field1, ':field2' => $field2, ':field3' => $field3));
$affected_rows = $stmt->rowCount();
クエリに入る文字列値をカプセル化する必要があります。
例えば
$insert = 'INSERT INTO boleia VALUES ("'.$nick.'", "'.$data_format.'", "'.$custo.'", etc.
SQL文字列には二重引用符を使用する方がよいでしょう。後で、文字列を引用符で囲んでいない場所でスポーツをするのが簡単になるからです。
$insert = "INSERT INTO boleia VALUES ('$nick', '$data_format', '$custo', '$dest_origem', '$dest_destino', NULL, '$matricula')";
人々、一般的。元の質問は1行だけです!それはまさにこれです:
$insert = 'INSERT INTO boleia VALUES ('.$nick.', '.$data_format.', '.$custo.', '.$dest_origem.', '.$dest_destino.', NULL, '.$matricula.');';
ここで、エスケープされていない文字列を修正する必要はありません。また、タグに表示されているという理由だけで、彼がPostgreSQLを使用していると仮定する必要もありません。彼には単純なエラーがありました-クエリに文字列のカプセル化がありません。これは、最も単純な形式で、次のように修正されています。
$insert = 'INSERT INTO boleia VALUES (\''.$nick.'\', \''.$data_format.'\', \''.$custo.'\', \''.$dest_origem.'\', \''.$dest_destino.'\', NULL, \''.$matricula.'\');';
以上です!これが行われていない場合に文字列をエスケープする方法として、またはそのような場合に人為的エラーが発生しにくいため二重引用符を使用する方がよい場合に限り、追加情報を追加したい場合に限ります。 、または読むのに適したPDOチュートリアルがある場合は、すべて、彼の問題に対する正確な回答の後の追加情報か、おしゃべりなトピックのいずれかです。
乾杯。
$db = new mysqli( some db data );
$nick = $db->real_escape_string( $nick );
$data_format = $db->real_escape_string( $data_format ); // this is probably not needed
$dest_origem = $db->real_escape_string( $dest_origem );
$dest_destino = $db->real_escape_string( $dest_destino );
$matricula = $db->real_escape_string( $matricula );
$insert = "INSERT INTO boleia VALUES ('$nick', '$data_format', '$custo', '$dest_origem', '$dest_destino', NULL, '$matricula')";
そしてあなたは大丈夫なはずです