【发布时间】:2018-02-07 12:23:00
【问题描述】:
我对这段代码没有任何问题,它运行得非常好,但我真的不明白它是如何工作的,甚至是正确的,所以:
我对 mysqli 的 ajax post 或 get 调用查询如下:
$con = mysqli_connect('localhost','root','','db') or die(header('Location: ./404.php'));
$add = "INSERT INTO table (id, id2, id3) VALUES('','$fid','')";
if(mysqli_query($con, $add)){
echo "added";
}
$remove = "DELETE FROM table WHERE id2='$fid'";
if(mysqli_query($con, $remove)){
echo "removed";
}
$getInfo = "SELECT * FROM table";
$result = $con->query($getInfo);
if($result->num_rows > 0) {
while($row = $result->fetch_assoc()){
//do something
}
}
对于$_POST or $_GET values I used mysqli_real_escape_string
这里转换为PDO:
try{
$con = new PDO('mysql:host=localhost;dbname=db;charset=utf8mb4', 'root', '', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$get = $con->query("SELECT * FROM table");
foreach($get->fetchAll(PDO::FETCH_ASSOC) as $row){
$data['0'] = $row['name'];
$data['1'] = $row['email'];
return $data;
}
$add = $con->prepare("INSERT INTO table (id, id2, id3) VALUES(:f1,:f2,:f3)");
$add->execute(array(':f1' => '', ':f2' => $fid, ':f3' => ''));
echo "added";
$remove = $con->prepare("DELETE FROM table WHERE id2=:f1");
$remove->bindValue(':f1', $fid, PDO::PARAM_STR);
$remove->execute();
echo "removed";
}catch(PDOException $ex){
echo "error";
}
现在这可行,但我真的不知道它是否用 pdo 正确编写,我不需要将 mysqli_real_escape_string 与 mysqli 或类似的东西一起使用。 我在网上能找到的只是它现在是如何编写的,代码的哪一部分在做什么,例如,当我在 mysqli 中使用插入、更新或删除时,我使用了
if(mysqli_query($con, $sql)){echo "success";}else echo 'fail';
如何使用 pdo 做到这一点? 而且对于使用 try 和 catch,我不知道我是否需要对每个查询都使用它,还是像我上面添加的那样?
再说一遍,我是 pdo 的新手,我不太了解它,上面的代码可以工作,但我不知道它的编写方式是否正确?
【问题讨论】:
-
给你我的朋友:phpdelusions.net/pdo
-
@gview 谢谢,有人在没有解释的情况下否决了下面的答案,你能不能给一个他的答案错误的原因?
-
为您提供了详细的解答,希望对您有所帮助。另外,我非常怀疑你的句柄是否准确——你显然根本不是一个愚蠢的孩子;)
-
我不知道我是否真的很愚蠢,但我总是有问题已经存在于某个地方,但我每次都以错误的方式搜索它们,所以当我问一些问题时,它可能听起来很愚蠢,就像我会问为什么我有 PDO::FETCH_ASSOC 以及为什么我们需要:: 但不需要: 或 ::::::。你明白了,如果我想知道某件事是如何工作的,我需要知道每一个细节......
-
顺便说一句,感谢您的链接和您的回答,它有很大帮助!