2016-04-04 6 views
-2

私はPHPが初めてで、SQLの自動インクリメントIDにコードを設定するのに少し問題があります。私が試みている方法は、非常に良いアプローチではなく、競争状態などのリスクについて知っていることを認識しています。これは、残りのコードを適切に並べ替えるまで、一時的になります。行を挿入するときにMySQLの自動インクリメントのプライマリキーフィールドに入れたいものは?

誰かが私がここで間違っていることを教えてください。または、有効なコードを取得するのを手伝ってください。

私のクラス:

<?php 

    $user = 'root'; 
    $pass = ''; 
    $db = 'testuser'; 

    $con=mysqli_connect('localhost', $user, $pass, $db) or die('Unable to connect'); 

    $data = json_decode(trim(key($_POST), '[]'), true); 

    $email = $data['email']; 
    $name = $data['name']; 
    $shortDes = $data['shortDes']; 
    $longDes = $data['longDes']; 
    $max = mysqli_prepare($con, 'SELECT MAX(society_id) FROM society'); 
    $society_id = $max + 1; 

    $statement = mysqli_prepare($con, 'INSERT INTO society(society_id, name, email, short_des, long_des) VALUES (?, ?, ?, ?, ?)'); 
    mysqli_stmt_bind_param($statement, 'issss', $societyId, $name, $email, $shortDes, $longDes); 
    mysqli_stmt_execute($statement); 
    mysqli_stmt_store_result($statement); 
    mysqli_stmt_close($statement); 

    mysqli_close($con); 
?> 

次のスニペットを中心に:ただ完全に自動インクリメントフィールドの値を除去するために必要

$max = mysqli_prepare($con, 'SELECT MAX(society_id) FROM society'); 
     $society_id = $max + 1; 

     $statement = mysqli_prepare($con, 'INSERT INTO society(society_id, name, email, short_des, long_des) VALUES (?, ?, ?, ?, ?)'); 
     mysqli_stmt_bind_param($statement, 'issss', $societyId, $name, $email, $shortDes, $longDes); 
+0

あなたは '$ max'クエリを実行しておらず、結果をフェッチしていません。また、 'MAX()'のエイリアスを使うべきです – Fabio

+1

なぜMySQLが自動インクリメントを扱わないのですか?それはそれを行うように設計されているからです。 – Kenyon

+0

私は自分のプライマリキーを自動インクリメントに設定しました。私はそれを正しく行ったと確信していますが、動作しません。 – kmil

答えて

関連する問題