1

挿入または更新しようとすると、データベースには何も入りません。これがテーブルレイアウトです

(
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `user_id` int(11) NOT NULL,
 `thesis_Name` varchar(200) NOT NULL,
 `abstract` varchar(200) NOT NULL,
 `complete` int(2) NOT NULL DEFAULT '1',
 PRIMARY KEY (`id`),
 KEY `user_id` (`user_id`)
)

ご覧のとおり、idは一意のキーです。user_idは、セッションが参照するものです。user_idが2つの行を持つことができるようにしたいので、idのみが一意である必要があります。したがって、それが挿入または更新のどちらであるかを検索するキーである必要があります。これは私が使用しているものです:

 if (empty($err)) {
        $id= mysql_real_escape_string($_POST['id']);
        $thesis_Name = mysql_real_escape_string($_POST['thesis_Name']);
        $abstract = mysql_real_escape_string($_POST['abstract']);

$user_id = intval($_SESSION['user_id']);
$query = sprintf("
  INSERT INTO
    `thesis`(`id`,`user_id`, `thesis_Name`, `abstract`)
  VALUES
    ('%s','%s', '%s', '%s')
  ON DUPLICATE KEY UPDATE
   `thesis_Name` = VALUES(`thesis_Name`),
   `abstract` = VALUES(`abstract`)
      ", $id, $user_id, $thesis_Name, $abstract);

それを回避する方法がない場合は、user_idも一意にすることができ、ユーザーごとに1行のみです。

4

2 に答える 2

1

最終的な質問を見せてもらえますか? の後にこのようなもので$query = sprintf(...)

echo $query

多分あなたの簡単な引用$abstractですか?あなたはmysql_real_escape_string()それを回避するために使用することができます:

$thesis_Name = mysql_real_escape_string($thesis_Name);
$abstract = mysql_real_escape_string($abstract);
于 2012-04-27T13:47:39.827 に答える
0
  1. mysql からエラーを取得するには、mysql_error()関数を使用する必要があります。
  2. クエリに配置している文字列をエスケープする必要があります。
  3. ここでは sprintf() は使用しません。

.

$user_id     = intval($_SESSION['user_id']);    
$id          = mysql_real_escape_string($_POST['id']);
$thesis_Name = mysql_real_escape_string($_POST['thesis_Name']);
$abstract    = mysql_real_escape_string($_POST['abstract']);

$query       = "INSERT INTO thesis (id, user_id, thesis_Name, abstract)
                VALUES ('$id','$user_id', '$thesis_Name', '$abstract')
                ON DUPLICATE KEY UPDATE
                    `thesis_Name` = VALUES(`thesis_Name`),
                    `abstract` = VALUES(`abstract`)";

mysql_query($query) or trigger_error(mysql_error()." ".$query);

mysql* 関数を使用している場合。

ただし、これは非常に珍しいアプローチであり
、通常、次のように PHP ロジックに基づいて使用するクエリを決定します。

if ($_POST['id']) {
    $query = "INSERT..."
} else {
    $query = "UPDATE..."
}
于 2012-04-27T13:52:33.193 に答える