使用我刚刚添加的索引列的数据

时间:2014-11-18 05:25:03

标签: php mysql indexing

我刚刚从PHP文档中读到了关于PDO :: lastInsertId的内容,但是经过一些测试后我得到了充分的理解,我绝对会对PHP xD感到厌烦,我应该更多地研究类和静态方法以及更多甚至了解放置代码的位置。

无论如何,我实际上并没有想知道最后一个Inserted Id,我想得到最后插入的MySQL表行的Index值。我的索引列被称为“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);
?>

更新:现在,我正在使用另一个查询来获取最后插入的行ID ...在我的情况下使用PDO是没有必要的,因为我正在开发一个私有应用程序,并且没有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 个答案:

答案 0 :(得分:1)

@FranCano使用@user通知我们您的回复。

你的第一个问题是你似乎在上面的代码中使用了mysqli而不是PDO。 mysqli和PDO是运行MySQL查询并且不共享功能的不同API。 PDO :: lastInsertId将为您提供上一个插入行的自动增量值。

PDO::__construct()开始,了解如何启动PDO实例并连接到数据库。查看PDO::query()和列出的示例,了解PDO的工作原理。但是,PDO::query()是基本的,不能保护您免受SQL注入。对于上面的查询,您应该使用预准备语句,因为您使用用户输入(POST)。准备好的陈述以PDO::prepare()开头。 MySQLi也准备了陈述,但它们略有不同。

PDO是面向对象的,您不能只调用PDO::query()PDO::lastInsertId()。您创建一个PDO实例以连接到数据库,然后使用prepare()创建一个PDOStatement对象,然后执行PDOStatement::execute对象运行PDOStatement查询。然后,您可以使用原始lastInsertId()对象上的PDO

如果您不了解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();
}