2017-06-21 236 views
-2

PDO相当于mysql_num_rows我有这样的代码:与警报

$pegaDados = mysql_query("SELECT * FROM curso WHERE cpf='$cpf'"); 

     if(mysql_num_rows($pegaDados) > 0){ 
      echo '<script type="text/javascript">alert("CPF já cadastrado em nosso Banco de Dados!");</script>'; 
     } 
     else{ 

我想去改造它PDO,但我面临的问题。谁能帮我?

我正在寻找网络上的解决方案,我没有找到它的“最佳”解决方案。你看我的连接如下面文件:

<?php 

define('MYSQL_HOST', '???'); 
define('MYSQL_USER', '???'); 
define('MYSQL_PASSWORD', '???'); 
define('MYSQL_DB_NAME', '???'); 

try 
{ 
$PDO = new PDO('mysql:host=' . MYSQL_HOST . ';dbname=' . MYSQL_DB_NAME, MYSQL_USER, MYSQL_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); 
} 

catch (PDOException $e) 
{ 
echo 'Erro ao conectar com o MySQL: ' . $e->getMessage(); 
} 

?> 
+0

也许[rowCount时(http://php.net/manual/en/pdostatement.rowcount.php)帮助? – aynber

+0

我想是的......如果数据在数据库中,我只需要提醒用户。 –

+0

@aynber'rowCount()'不适用于PDO中的SELECT查询 –

回答

1

与PDO有些数据库驱动程序没有自然的行数函数(rowCount() is only for INSERT, UPDATE or DELETE queries),所以你必须使用另一种方法。以下是我使用(编辑:基于OP的信息更新后的连接),然后你就可以测试

$sql = 'select * from table'; 
$data = $PDO->query($sql); 
$rows = $data->fetchAll(); 
$num_rows = count($rows); 

if($num_rows > 0){ 
    // your code here 
} 

编辑基于从OP新的信息更新代码:

$sql = "SELECT * FROM curso WHERE cpf = :cpf"; 
$stmt = $PDO->prepare($sql); 
$stmt->bindParam(':cpf', $cpf); 
$result = $stmt->execute(); 
$rows = $result->fetchAll(); 
$num_rows = count($rows); 
+0

是的,它有..... – sidyll

+1

请分享它然后@sidyll'rowCount()'只适用于INSERT,UPDATE和DELETE查询,而不是SELECT。 * [PDOStatement :: rowCount()返回受DELETE,INSERT或UPDATE语句影响的行数。](http://php.net/manual/en/pdostatement.rowcount.php)* –

+0

致命错误:致电到 –

-2

你应该试试这个

$sql = "SELECT * FROM curso WHERE cpf='$cpf'"; 
$pegaDados = $con->prepare($sql); 
$pegaDados->execute(); 
if($pegaDados->rowCount() > 0){ 
    echo '<script type="text/javascript">alert("CPF já cadastrado em nosso Banco de Dados!");</script>'; 
} 

$ con是您的数据库连接。

+0

改变教学/宣传马虎和危险的编码习惯。 http://meta.stackoverflow.com/q/344703/)。另外[一个更有价值的答案来自于显示OP的正确方法](https://meta.stackoverflow.com/a/290789/1011527)。从另一个答案复制错误的查询,并且,如果您要准备查询,您应该遵守ld使用占位符来实际准备变量。 –

+0

我的连接位于外部文件中。 –

+0

好吧,那么你可以在构造函数中传递你的连接变量并存储在一个私有变量中。 –

-1

我刚刚将:cpf变量更改为$cpf,它的工作原理!

<?php 

require '../conexao.php'; 

$nome    =   addslashes ($_POST['nome']); 
$foto    =   addslashes ($_POST['foto']); 
$cpf    =   addslashes ($_POST['cpf']); 
$rg     =   addslashes ($_POST['rg']); 
$email    =   addslashes ($_POST['email']); 
$telefone   =   addslashes ($_POST['telefone']); 
$endereco   =   addslashes ($_POST['endereco']); 
$bairro    =   addslashes ($_POST['bairro']); 
$cidade    =   addslashes ($_POST['cidade']); 
$estado    =   addslashes ($_POST['estado']); 
$observacoes  =   addslashes ($_POST['observacoes']); 
$curso    =   addslashes ($_POST['curso']); 

$newquery = "SELECT * FROM curso WHERE cpf = $cpf"; 

$data = $PDO->query($newquery); 
$rows = $data->fetchAll(); 
$num_rows = count($rows); 

if($num_rows > 0){ 
    echo '<script type="text/javascript">alert("CPF já cadastrado em nossa base de dados!");</script>'; 
} 

else{ 

$sql = "INSERT INTO curso SET foto = :foto, nome = :nome, email = :email, cpf = :cpf, rg = :rg, telefone = :telefone, endereco = :endereco, bairro = :bairro, cidade = :cidade, estado = :estado, observacoes = :observacoes, curso = :curso"; 

$stmt = $PDO->prepare($sql); 
$stmt->bindParam(':foto', $foto); 
$stmt->bindParam(':nome', $nome); 
$stmt->bindParam(':email', $email); 
$stmt->bindParam(':cpf', $cpf); 
$stmt->bindParam(':rg', $rg);  
$stmt->bindParam(':telefone', $telefone); 
$stmt->bindParam(':endereco', $endereco); 
$stmt->bindParam(':bairro', $bairro); 
$stmt->bindParam(':cidade', $cidade); 
$stmt->bindParam(':estado', $estado); 
$stmt->bindParam(':observacoes', $observacoes); 
$stmt->bindParam(':curso', $curso); 
$result = $stmt->execute(); 

echo '<script type="text/javascript">alert("Matrícula realizada com sucesso!");</script>'; 
echo "<script>window.location = 'https://pag.ae/bck57zw';</script>"; 

} 

?>

+0

你是否看到我的答案编辑? –

+0

是的,它也不起作用。我需要将':cpf'更改为'$ cpf',现在它可以工作! –

+0

感谢您的支持!你太棒了! –