2014-11-18 2 views
0

PHP 설명서에서 PDO :: lastInsertId에 대한 내용을 읽었지만 일부 테스트를 마친 후 PHP xD에서 절대적으로 빠져 나왔습니다. 클래스와 정적 메서드에 대해 자세히 조사해야합니다. 그 코드를 어디에 넣을 지 더 많이 이해해야합니다.방금 ​​추가 한 인덱스 열의 데이터 사용

어쨌든, 마지막으로 삽입 된 ID를 알기 위해 노력하고있는 것이 아니며, MySQL 테이블의 마지막으로 삽입 된 행의 인덱스 값을 가져오고 싶습니다. 내 색인 열은 "id"라고하며 새 행을 추가 할 때마다 자동 증가로 설정되지만 번호가 업데이트되지 않는 행을 삭제하면 "id"행의 값이 항상 사용되지 않을 수 있습니다 행 번호와 동일합니다.

다음은 새 행을 삽입하는 코드입니다. 업데이트

<?php 

    require('conexion.php'); 

    $name=$_POST['name']; 
    $email=$_POST['email']; 
    $pass=$_POST['pass']; 
    $localidad=$_POST['localidad']; 
    $saldo=$_POST['saldo']; 
    $slastupdate=$_POST['slastupdate']; 


    $query="INSERT INTO usuarios (name, email, pass, localidad, saldo, slastupdate) VALUES ('$name','$email','$pass','$localidad','$saldo','$slastupdate')"; 

    $resultado=$mysqli->query($query); 
?> 

: 지금 들어, 내가 PDO를 사용하여 내 경우 ... 마지막의 삽입 된 행 ID를 얻기 위해 다른 쿼리를 사용하고 내가 개인 응용 프로그램을 개발하고 있어요 때문에 필요하지 않고, 거기에 mysql 주입의 위험이 없음

require_once "../php/new_mysql.php"; 
$query="INSERT INTO clientes (gira, localidad, nombre, email, proxivisi, saldo) VALUES ('$gira', '$localidad', '$nombre', '$email', '$proxivisi', '$saldo')"; 
    $agregar=$mysql->query($query) or die(mysql_error()); 
    $querygetid=$mysql->query("SELECT id, proxivisi FROM clientes WHERE nombre='$nombre' AND email='$email'"); 
    $getid=$querygetid->fetch_assoc(); 
    $id=$getid['id']; 
+1

당신은 인덱스 값으로 무엇을 의미합니까? 기본 키/자동 증가 값 이외의 값은 무엇이 좋을까요? 행 번호를 얻으 려한다면'SELECT count (*)'가 필요합니다. – Devon

+1

"행 번호"가 없습니다 - 아마도 최근에 삽입 된 행보다 적은 수의 행을 얻고 싶다는 뜻입니다. Usuarios에서 ID SELECT <삽입 후 마지막으로 삽입 된 ID>'SELECT count (1) – a1ex07

+0

사실, 기본 키/자동 증가 값을 가져 오려고합니다. 나는'PDO :: lastInsertId' 메소드로 그 값을 얻을 수 있을지 모르겠다. 만약 그 방법으로 얻을 수 있다면, 어떻게해야할지 모른다. 어쨌든 행 수가 세는 방법이 있다는 것을 알았으므로'PD :: lastInsertId'를 사용하여 올바른 방향으로 가고 있다고 생각합니다. PHP 클래스에 대해 더 배우기 시작해야합니다.이 스크립트를 스크립트에 적용하는 방법을 알고 있어야합니다 :) –

답변

1

@FranCano는 @user를 사용하여 회신을 알립니다.

첫 번째 문제는 위의 코드에서 PDO가 아니라 mysqli를 사용하고있는 것 같습니다. mysqli와 PDO는 MySQL 쿼리를 실행하는 서로 다른 API이며 함수를 공유하지 않습니다. PDO :: lastInsertId는 마지막으로 삽입 된 행의 자동 증가 값을 제공합니다.

PDO::__construct()으로 시작하여 PDO 인스턴스를 시작하고 데이터베이스에 연결하는 방법을 확인하십시오. PDO의 작동 방식을 보려면 PDO::query()과 나열된 예제를 확인하십시오. 그러나 PDO::query()은 기본이며 SQL 주입으로부터 보호하지 않습니다. 위의 쿼리에서 사용자 입력 (POST)을 사용하므로 준비된 문을 사용해야합니다. 준비된 문은 PDO::prepare()으로 시작됩니다. MySQLi도 진술을 준비했지만 약간 다릅니다.

PDO는 객체 지향이므로 PDO::query()PDO::lastInsertId()을 호출 할 수 없습니다. PDO 인스턴스를 만들어 데이터베이스에 연결 한 다음 prepare()를 사용하여 PDOStatement 개체를 만든 다음 쿼리를 실행할 PDOStatement 개체 (PDOStatement::execute)를 실행합니다. 그런 다음 원본 PDO 개체의 lastInsertId()으로 이동할 수 있습니다.

OOP 또는 객체 지향 프로그래밍을 모른다면이 모든 것이 꽤 혼란 스럽기 때문에 읽기를 시작해야합니다.

빠른 예는 다음과 같습니다

$pdo = new PDO(..mysql connection information..); 
// Create a PDOStatement object 
$stmt = $pdo->prepare("INSERT into test ('field1', 'field2') VALUES (?, ?)"); 
// Execute the prepared statement safely inserting the post variables into the ?'s. This protects against SQL injection attacks. 
if ($stmt->execute(array($_POST['value1'], $_POST['value2']))) { 
    $id = $pdo->lastInsertId(); 
} 
+0

많은 도움이되었는데, 나는 왜 그 코드를 만들 수 없는지 이해했다. "require_once"../php/new_mysql.('$ gira', '$ localidad', '$ nombre', '$ email', '$ proxivisi'); $ query2 = "INSERT INTO 클라이언트 (gira, localidad, nombre, email, proxivisi, saldo) , "$ saldo"); $ agregar = $ mysql-> query ($ query2) 또는 die (mysql_error()); $ querygetid = $ mysql-> query ("SELECT id, proxivisi FROM clientses where nombre = '$ getid = $ querygetid-> fetch_assoc(); $ id = $ getid [ 'id']; $ fecha = date ('Ym-d'); $ hora = date ('H : i : s'); '다른 ID를 사용하여이 문제를 해결했습니다. –

관련 문제