use*_*684 34 php mysql mysqli pdo
我需要帮助检查是否存在行.我收到"电子邮件不再存在publisher@example.com".
有没有更好的方法来检查mysqli是否存在行?
email no longer exists publisher@example.com
Run Code Online (Sandbox Code Playgroud)
Fun*_*ner 65
以下是经过试验,测试和验证的方法,以检查是否存在行.
(其中一些我自己使用,或过去曾使用过).
编辑:我在我的语法中做了一个先前的错误,我使用了mysqli_query()两次.请参阅修订版.
即:
if (!mysqli_query($con,$query))应该简单地读作if (!$query).
附注:无论'".$var."'和'$var'做同样的事情.您可以使用其中任何一个,两者都是有效的语法.
以下是两个已编辑的查询:
$query = mysqli_query($con, "SELECT * FROM emails WHERE email='".$email."'");
if (!$query)
{
die('Error: ' . mysqli_error($con));
}
if(mysqli_num_rows($query) > 0){
echo "email already exists";
}else{
// do something
}
Run Code Online (Sandbox Code Playgroud)
在你的情况下:
$query = mysqli_query($dbl, "SELECT * FROM `tblUser` WHERE email='".$email."'");
if (!$query)
{
die('Error: ' . mysqli_error($dbl));
}
if(mysqli_num_rows($query) > 0){
echo "email already exists";
}else{
// do something
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用mysqli_预先准备好的语句方法:
$query = "SELECT `email` FROM `tblUser` WHERE email=?";
if ($stmt = $dbl->prepare($query)){
$stmt->bind_param("s", $email);
if($stmt->execute()){
$stmt->store_result();
$email_check= "";
$stmt->bind_result($email_check);
$stmt->fetch();
if ($stmt->num_rows == 1){
echo "That Email already exists.";
exit;
}
}
}
Run Code Online (Sandbox Code Playgroud)
<?php
$email = $_POST['email'];
$mysql_hostname = 'xxx';
$mysql_username = 'xxx';
$mysql_password = 'xxx';
$mysql_dbname = 'xxx';
try {
$conn= new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
exit( $e->getMessage() );
}
// assuming a named submit button
if(isset($_POST['submit']))
{
try {
$stmt = $conn->prepare('SELECT `email` FROM `tblUser` WHERE email = ?');
$stmt->bindParam(1, $_POST['email']);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
}
}
catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
if($stmt->rowCount() > 0){
echo "The record exists!";
} else {
echo "The record is non-existant.";
}
}
?>
Run Code Online (Sandbox Code Playgroud)
注意:
在处理上面使用/概述的表单和POST数组时,请确保POST数组包含值,POST方法用于表单并匹配输入的命名属性.
注意:<input type = "text" name = "var">- $_POST['var']匹配.$_POST['Var']不配.
请教:
检查引用时出错:
请注意,MySQL API不会混用,以防您可能正在访问此问答并且您正在使用mysql_(并查询).
请参考以下内容:
如果您正在使用mysql_API并且无法使用它,请参阅以下堆栈上的问答:
这些mysql_*函数已弃用,将从未来的PHP版本中删除.
您还可以向(a)行添加UNIQUE约束.
参考文献:
您必须执行查询并在查询中将单引号添加到$ email,因为它是一个字符串,并且删除is_resource($query)$ query是一个字符串,$ result将是资源
$query = "SELECT `email` FROM `tblUser` WHERE `email` = '$email'";
$result = mysqli_query($link,$query); //$link is the connection
if(mysqli_num_rows($result) > 0 ){....}
Run Code Online (Sandbox Code Playgroud)
UPDATE
在你的编辑基础上改变:
if(is_resource($query) && mysqli_num_rows($query) > 0 ){
$query = mysqli_fetch_assoc($query);
echo $email . " email exists " . $query["email"] . "\n";
Run Code Online (Sandbox Code Playgroud)
通过
if(is_resource($result) && mysqli_num_rows($result) == 1 ){
$row = mysqli_fetch_assoc($result);
echo $email . " email exists " . $row["email"] . "\n";
Run Code Online (Sandbox Code Playgroud)
你会没事的
更新2
更好的方法应该是具有执行以下SQL的Store Procedure,将Email作为参数传递
SELECT IF( EXISTS (
SELECT *
FROM `Table`
WHERE `email` = @Email)
, 1, 0) as `Exist`
Run Code Online (Sandbox Code Playgroud)
并在PHP中检索值
Pseudocodigo:
$query = Call MYSQL_SP($EMAIL);
$result = mysqli_query($conn,$query);
$row = mysqli_fetch_array($result)
$exist = ($row['Exist']==1)? 'the email exist' : 'the email doesnt exist';
Run Code Online (Sandbox Code Playgroud)
有多种方法可以检查数据库中是否存在某个值。让我演示如何使用 PDO 和 mysqli 正确完成此操作。
PDO 是更简单的选择。要查明数据库中是否存在某个值,您可以使用准备好的语句 和fetchColumn()。不需要获取任何数据,因此我们仅1在值存在时才获取。
<?php
// Connection code.
$options = [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new \PDO('mysql:host=localhost;port=3306;dbname=test;charset=utf8mb4', 'testuser', 'password', $options);
// Prepared statement
$stmt = $pdo->prepare('SELECT 1 FROM tblUser WHERE email=?');
$stmt->execute([$_POST['email']]);
$exists = $stmt->fetchColumn(); // either 1 or null
if ($exists) {
echo 'Email exists in the database.';
} else {
// email doesn't exist yet
}
Run Code Online (Sandbox Code Playgroud)
有关更多示例,请参阅:如何检查数据库中是否存在电子邮件?
与往常一样,mysqli 有点麻烦并且受到更多限制,但我们可以使用准备好的语句遵循类似的方法。
<?php
// Connection code
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new \mysqli('localhost', 'testuser', 'password', 'test');
$mysqli->set_charset('utf8mb4');
// Prepared statement
$stmt = $mysqli->prepare('SELECT 1 FROM tblUser WHERE email=?');
$stmt->bind_param('s', $_POST['email']);
$stmt->execute();
$exists = (bool) $stmt->get_result()->fetch_row(); // Get the first row from result and cast to boolean
if ($exists) {
echo 'Email exists in the database.';
} else {
// email doesn't exist yet
}
Run Code Online (Sandbox Code Playgroud)
COUNT(1)您还可以使用以下命令从第一行获取并读取第一项,而不是将结果行(甚至可能不存在)转换为布尔值fetch_row()[0]
有关更多示例,请参阅:如何使用 mysqli 准备好的语句检查数据库中是否存在值
mysqli_num_rows(),请不要听他们的。这是一种非常糟糕的方法,如果滥用可能会导致性能问题。real_escape_string(). 这并不是为了防止 SQL 注入。如果正确使用准备好的语句,则无需担心任何转义。| 归档时间: |
|
| 查看次数: |
82345 次 |
| 最近记录: |