2013-04-17 75 views
0

有人可以重新编写下面的代码作为准备好的语句吗?学习SELECT FROM WHERE准备语句

result = mysqli_query($con,"SELECT * FROM note_system WHERE note = '$cnote'") 
or die("Error: ".mysqli_error($con)); 

while($row = mysqli_fetch_array($result)) 
{ 
$nid = $row['id']; 

} 

我想学习准备好的语句,并且无法理解它在搜索时发现的许多示例是如何工作的。我希望如果我看到一些我熟悉的代码,可以重新编写为可能点击我的准备好的语句。请不要PDO,这在我目前的知识水平上对我来说太困难了。谢谢。

+1

[参见手册](http://php.net/manual/en/mysqli.prepare.php) – Kermit

+0

PHP手册首先让我感到困惑。这就是我来这里问这个问题的原因。 – ButterDog

+0

希望我的回答清除了一些东西...祝你好运先生 –

回答

4

你好ButterDog让我带你通过PDO一步一步来。

步骤1)

创建一个名为connect.php文件(或你想要什么都)。这个文件将在每个需要数据库交互的php文件中被需要。

让我们开始也请注意我的意见:

?php 

//We set up our database configuration 
$username="xxxxx"; // Mysql username 
$password="xxxxx"; // Mysql password 


// Connect to server via PHP Data Object 
$dbh = new PDO("mysql:host=xxxxx;dbname=xxxxx", $username, $password); // Construct the PDO variable using $dbh 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Set attributes for error reporting very IMPORTANT! 
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE); // Set this to false so you can allow the actual PDO driver to do all the work, further adding abstraction to your data interactions. 
?> 

步骤2)要求connect.php请看一看:

require ('....../........./...../connect.php'); // Require the connect script that made your PDO variable $dbh 

步骤3)

启动数据库的交互只需执行以下操作,请阅读代码注释。目前我们不会担心数组问题!获得PDO的完整体验,然后担心使其更易于使用!随着重复,“漫长的路程”对代码有了更多的了解。一开始就不要偷工减料,一旦明白自己在做什么,就切断它们!

$query = $dbh->prepare("SELECT * FROM note_system WHERE note = :cnote"); // This will call the variable $dbh in the required file setting up your database connection and also preparing the query! 

$query->bindParam(':cnote', $cnote); // This is the bread and butter of PDO named binding, this is one of the biggest selling points of PDO! Please remember that now this step will take what ever variable ($cnote) and relate that to (:cnote) 

$query->execute(); // This will then take what ever $query is execute aka run a query against the database 

$row = $query->fetch(PDO::FETCH_ASSOC); // Use a simple fetch and store the variables in a array 

echo $row['yourvalue']; // This will take the variable above (which is a array) and call on 'yourvalue' and then echo it. 

这就是所有有PDO.希望这有助于!

也看看this。这对我非常有帮助!

我也使用this作为参考(有时) - 网站看起来像垃圾,但有关于PDO的质量信息。我也使用this,我发誓这是最后一个环节!所以在这个问题出现之后,只要问一下,但希望这可以变成PDO的一个参考指南。(希望笑)

+0

谢谢!这对我来说意义重大。我真的很感激你花时间帮助我更好地理解这一点。有时候,PHP手册对我来说意义不大。这真的有帮助。再次感谢,我会查看该链接。 – ButterDog

+0

当然,这就是为什么SO在这里。每个人都从某个地方开始,一些人开始理解得更快,另一些人开始更慢,而他们中间有些人! - 大声笑。如果您有任何问题,请随时询问! –

+0

为您添加了更多的链接先生。我想你会发现它们非常有用! –

1

这与PDO做到这一点的一种方法:

$sel = $db->prepare("SELECT * FROM note_system WHERE note=:note"); 
$sel->execute(array(':note' => $_POST['note'])); 
$notes = $sel->fetchAll(PDO::FETCH_ASSOC); 

参见占位符:note中,管线2在第1行的查询,这势必$_POST['note'](或就此而言的任何其它变量)。

如果我想再次运行该查询,具有不同的价值为:note,我就打电话线2和3

显示结果:

foreach ($notes as $note) { 

    echo $note['id'] . ": " . $note['text'] . "<br />"; 
} 
1

使用PDO:

http://php.net/manual/en/book.pdo.php

各种文档:

/* Connect to an ODBC database using driver invocation */ 
$dsn = 'mysql:dbname=testdb;host=127.0.0.1'; 
$user = 'dbuser'; 
$password = 'dbpass'; 

try { 
    $dbh = new PDO($dsn, $user, $password); 
} catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
} 

$sql = 'SELECT name, colour, calories 
FROM fruit 
WHERE calories < :calories AND colour = :colour'; 
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 
$sth->execute(array(':calories' => 150, ':colour' => 'red')); 
$red = $sth->fetchAll(); 
+0

不是没有PDO没有这样做吗?我是PHP的新生。看着它的PDO似乎有点凌驾于我的头上。 – ButterDog

+0

@ButterDog是的。你可以使用'mysqli_'函数。 – Kermit

+0

@FreshPrinceOfSO不是PDO的PHP扩展?不能写一个不是PDO的准备好的语句?我比我想象的更困惑吗?谢谢。 – ButterDog

1

这会帮助你在正确的道路上......

$link = mysqli_connect("localhost", "my_user", "my_password", "world"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$query = "SELECT id FROM note_system WHERE note = ?"; 

$stmt = mysqli_stmt_init($link); 
if(!mysqli_stmt_prepare($stmt, $query)) { 
    print "Failed to prepare statement\n"; 
} 
else { 
    $note = "mynote"; 
    mysqli_stmt_bind_param($stmt, "s", $note); 

    mysqli_stmt_execute($stmt); 
    $result = mysqli_stmt_get_result($stmt); 
    while ($row = mysqli_fetch_array($result)) 
    { 
     $nid = $row['id']; 
    } 
} 

mysqli_stmt_close($stmt); 
mysqli_close($link); 
+0

谢谢,这是非常有益的! – ButterDog