我刚刚从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'];
答案 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();
}