0

入力として 2 つの値を受け取り、このコードがある次のファイルに post メソッドを使用してそれらを解析するフォームがあります。これにより、2 つの値が MySQL データベースに保存されます。しかし、奇妙なことに、そうではありません..そして、私が得る出力エラーはこれです: 0: 0:

$service_name = $_POST['service_name'];
$service_price = $_POST['service_price'];

$link = mysql_connect("localhost", "db_user", "pa$$");

mysql_select_db("database", $link);
echo mysql_errno($link) . ": " . mysql_error($link). "\n";

mysql_select_db("database", $link);
mysql_query("INSERT INTO service_tbl(id_service, service_name, service_price) VALUES(NULL,'$service_name','$service_price')", $link);
echo mysql_errno($link) . ": " . mysql_error($link) . "\n";

私のデータベース テーブルservice_tblid_serviceは、auto_increment があり、他の 2 つの列は VARCHAR です。ここで何が間違っていますか?

4

3 に答える 3

1
mysql_query("INSERT INTO service_tbl( service_name, service_price)     VALUES('{$service_name}','{$service_price}')", $link);

これをId_service挿入できない自動インクリメントとして使用します。

于 2013-05-18T19:29:18.007 に答える
1

いくつかの修正:

  1. mysql_*他の回答/コメントですでに述べたように、非推奨の関数は使用しないでください。
  2. 自動インクリメント フィールドに値を渡す必要はありません。
  3. デバッグ出力を実際のエラー チェックに変更します。
  4. ユーザー入力をサニタイズします。

改訂されたコード:

$service_name  = $_POST['service_name'];
$service_price = $_POST['service_price'];

$mysqli = new MySQLi('localhost', 'db_user', 'pa$$', 'database');
if ($mysqli->connect_errno) {
    throw new ErrorException("Failed to connect to MySQL: " . $mysqli->connect_error);
}

$query = sprintf("INSERT INTO service_tbl (service_name, service_price) VALUES ('%s', $f)",
    $mysqli->real_escape_string($service_name),
    (float)$service_name
);
// At this point, you can echo the query to test it in eg. phpMyAdmin
$result = $mysqli->query($query);
if ($result === false) {
    throw new ErrorException("Query failed: " . $mysqli->error);
}

printf("Select returned %d rows.\n", $result->num_rows);

while ($obj = $result->fetch_object()) {
    print_r($obj);
}

// Free result set
$result->close();
于 2013-05-21T13:36:41.670 に答える
1

自動インクリメント列に挿入しようとしていますがNULL、これは不可能です。単純に変更してください

mysql_query("INSERT INTO service_tbl( service_name, service_price)     VALUES('$service_name','$service_price')", $link);

mysql_次に、関数は非推奨であることを覚えておきたいので、mysqliまたはに切り替えることをお勧めします。PDO実際に のリスクがsql injectionあります。こちらをご覧くださいPHP で SQL インジェクションを防ぐにはどうすればよいですか? . リスクを回避するために、準備されたステートメントを使用する必要があります

于 2013-05-18T19:32:02.900 に答える