1

テキストエリア情報画像を同時に MySQLにアップロードするフォームがあります。

Textareaは、Imageはコピーで ある必要があります。内で取得しようとしました; を返します。iDAUTO_INCREMENT iDtextarea's$_POSTlastInsertId()Fatal error: Call to undefined function lastInsertId()

これは、関数および/またはクエリに情報をアップロードする isset の現在のコードです。

if(isset($_POST['update']) && isset($_FILES['photo1'])){
    $update = $_POST['update'];
    $data = $Wall->Insert_Update( $uiD, $update);

    $name       = $_FILES['photo1']['name'];
    $tmp_name   = $_FILES['photo1']['tmp_name'];
    $target = "uploads/". $_FILES['photo1']['name'];

    if (move_uploaded_file($tmp_name,$target)) {
        $sth = $db->prepare("SELECT post_iD FROM posts WHERE uid_fk = :uiD");
        $sth->execute(array(':uiD' => $uiD));

        $post_iD = lastInsertId();
        $sth = $db->prepare('INSERT INTO user_uploads (image_path, uid_fk, image_id_fk) VALUES (:image_path, :uiD, :image_id_fk)');
        $sth->execute(array(':image_path' => $target, ':uiD' => $uiD, ':image_id_fk' => $post_iD));
    }
}

テキストエリアをアップロードしている Insert_Update は次のとおりです。

PUBLIC FUNCTION Insert_Update( $uiD, $update){
$sth = $this->db->prepare("SELECT post_iD,message FROM posts WHERE uid_fk = :uiD ORDER by post_iD DESC LIMIT 1");
$sth->execute(array(':uiD' => $uiD));

$result = $sth->fetch();

        if ($update!=$result['message']){

            $sth = $this->db->prepare("INSERT INTO posts ( message, uid_fk, ip, created) VALUES ( :update, :id, :ip, :time)");
            $sth->execute(array(':update' => $update, ':id' => $uiD, ':ip' => $_SERVER['REMOTE_ADDR'], ':time' => time()));

            $sth = $this->db->prepare("
                                        SELECT M.post_iD, M.uid_fk, M.message, M.created, U.username 
                                        FROM Posts M, users U 
                                        WHERE M.uid_fk=U.uiD 
                                        AND M.uid_fk = ? 
                                        ORDER by M.post_iD DESC LIMIT 1");
            $sth->execute(array($uiD));

            $result = $sth->fetchAll();
            return $result;
            } else {
            return false;
        }
}

形:

<form method="POST" action="" enctype="multipart/form-data">
    <textarea name="update" id="update" class="_iType"></textarea>
    <input type="file" name="photo1">
    <input type="submit" value="post" class="update_button"> 
</form>

役立つとは思えないデータベース内の詳細情報。

  1. posts table: テキストエリア情報が配置される場所。

    *post_iD | メッセージ | uid_fk | ip | 作成 |*

  2. user_uploads table: イメージの場所が配置される場所。

    *image_iD | イメージパス | uid_fk | image_id_fk*

注意:image_id_fk等しいはずpost_iDです(これは明らかです)。

どうですかlastInsertId(); 使用されると思いますか?

編集 1: アップロードが完了した後、image_id_fk に挿入された値は、post_iD 値ではなく 0 になります。この理由についてのアイデアはありますか?

4

2 に答える 2

1

ステートメントを正常に実行した直後に使用できます。ただし、以前に実行されたステートメントINSERTが存在する可能性があるため、実行が成功したかどうか (または影響を受けた行があるかどうか) を常に確認する必要があります。last insert ID

$sth = $this->db->prepare("INSERT INTO posts ( message, uid_fk, ip, created) VALUES ( :update, :id, :ip, :time)");
$sth->execute(array(':update' => $update, ':id' => $uiD, ':ip' => $_SERVER['REMOTE_ADDR'], ':time' => time()));

$this->db->lastInsertId(); //Upon success, is available

例: 新しい投稿を作成する関数があります。成功したこの関数は、最後の挿入 ID 値を返すことができるため、その値をユーザーに表示できます。お気に入り:

if (isset($_GET['id'])){
  $id = $manager->createPost($_GET['id']) ;
  if (is_numeric($id)){
    echo "Your article has been created. ID: {$id}" ; //Or link to it.
  }
}

アップデート:

あなたの問題に対する私の提案は次のとおりlastInsertId always retuns 0です。

値を挿入するテーブルにはPRIMARY KEY AUTO_INCREMENT、できれば type のフィールドが必要intです。

于 2013-06-28T06:52:32.493 に答える
0

pdo lastinsertidに間違った方法でアクセス しています。データベース接続オブジェクトが必要です。

$post_iD = lastInsertId();

する必要があります

$post_iD = $db->lastInsertId();
于 2013-06-28T06:51:20.220 に答える