使用PHP准备语句

时间:2012-11-13 13:52:25

标签: php mysql prepared-statement

我是PHP的新手..我被困在如何将我的sql语句转移到预备语句..我得到的错误信息是你“无法连接”..

我的代码如下

$connection = mysql_connect($host,$username,$password) or die ("can't connect"); 


$select_database = mysql_select_db($db_name);
$id = mysql_real_escape_string ($_GET ['id']); 

$query = 'SELECT * from &tbl_name where id=?';
$stmt = $connection->prepare($query);
$stmt->bind_param("d", $id);
$stmt->execute();
$rows=mysql_fetch_array($stmt);
$stmt->close();

4 个答案:

答案 0 :(得分:6)

实际上你有两个问题。

第一个与你的问题相关的是这一行:

$connection = mysql_connect($host,$username,$password) or die ("can't connect");

您说您收到错误can't connect。这意味着数据库连接的主机,用户名和/或密码无效。检查连接信息是否正确,您应该能够解决问题。

第二个是您使用mysql_函数连接到数据库,然后尝试使用mysqli_绑定/执行函数。你不能混合搭配。

因为您尝试使用OOP样式进行绑定/执行,所以这是一个应该有用的重新编码样本:

$connection = new mysqli($host, $username, $password);
if ($connection->connect_error) {
    die("can't connect");
}
$query = 'SELECT * from tbl_name where id=?';
$stmt = $connecton->prepare($query);
$stmt->bind_param("d", $id);
$results = $stmt->execute();
$rows = $results->fetch_array();
$stmt->close();

答案 1 :(得分:2)

您无法使用旧版mysql_*函数执行预准备语句。您需要使用PDO或MySQLi:

$dbh = new PDO("mysql:dbname=testdb;host=127.0.0.1", "username", "password");

$query = "SELECT * FROM myTable WHERE id=?";
$stmt = $dbh->prepare($query);
$stmt->execute(array($my_id));

$result = $stmt->fetchAll();

答案 2 :(得分:1)

“{无法连接”来自die()函数,如果mysql_connect失败,将停止执行脚本。这意味着您的代码无法创建连接,请检查$host$username$password参数。如果您的主机是远程主机,请确保您有权连接它。

正如pce所述,您在$connecton中也有一个拼写错误,应该是$connection

答案 3 :(得分:0)

1.定义数据库const以供以后在项目中使用; (此代码只能执行一次)

define( "DBN","foo");//where foo is the database name
define( "DB_USERNAME", "rootuser" ); //generally root
define( "DB_PASSWORD", "my_very_hard_password" ); //be more creative
define( "DB_DSN", "mysql:host=localhost;dbname=".DBN );

...

2.创建PDO对象并执行

$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$sql = "SELECT * from &tbl_name where id=:id";
$st = $conn->prepare( $sql );
$st->bindValue( ":id", $obj->id, PDO::PARAM_INT );  
// or $st->bindValue( ":id", 5, PDO::PARAM_INT );   
$st->execute();
return $st->fetchAll();