gpt4 book ai didi

php - 在 php 中使用 pdo 创建数据库

转载 作者:行者123 更新时间:2023-11-29 05:28:11 26 4
gpt4 key购买 nike

当我在不使用绑定(bind)参数的情况下创建数据库时,它工作得很好。

$login = 'root';
$password = 'root';
$dsn = "mysql:host=localhost";

$opt = array(
// any occurring errors wil be thrown as PDOException
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
// an SQL command to execute when connecting
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
);

// Making a new PDO conenction.
$conn = new PDO($dsn, $login, $password,$opt);

$db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS account');

$db->execute();
// End Connection and Return to other files.

但是在应用了 bindParam 后它不能正常工作。

$db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS ?');
$db->bindParam(1,`account`);
$db->execute(); //line 18

显示错误:

fatal error :消息为“SQLSTATE[42000] 的未捕获异常“PDOException”:语法错误或访问冲突:1064 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,以了解在/Applications/MAMP/htdocs/create/index.php:18 Stack trace: #0/Applications/MAMP/htdocs 中第 1 行的“NULL”附近使用的正确语法/create/index.php(18): PDOStatement->execute() #1 {main} throw in/Applications/MAMP/htdocs/create/index.php on line 18

更新:

<?php
$login = 'root'; // Login username of server host.
$password = 'root'; // Password of server host.
$dsn = "mysql:host=localhost"; // Set up a DSN for connection with Database Frat.
$dbb = 'sale';
$opt = array(
// any occurring errors wil be thrown as PDOException
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
// an SQL command to execute when connecting
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
);

// Making a new PDO conenction.
$conn = new PDO($dsn, $login, $password,$opt);

$db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS ?');
$db->bindParam(1,'$dbb'); //line 17
$db->execute();

?>

它显示错误:无法在第 17 行通过引用传递参数 2

最佳答案

这里有两个大问题。第一个是轻微的。这些代码行永远不会起作用:

$db->bindParam(1,`account`);
$db->bindParam(1,'$dbb'); //line 17

这是因为它们都试图将 bindParam 作为 string 调用。这是不可能的。 bindParam 需要对变量的引用。这就是您收到“无法通过引用传递参数 2”错误的原因:您只能通过引用传递变量

然而,这些中的任何一个都可以工作:

$db->bindParam(1, $dbb); // call bindParam on a variable
$db->bindValue(1, 'account'); // call bindValue on a string literal

然而,更根本的问题是您对准备好的语句的理解。准备好的语句的想法不是将字符串简单地替换为另一个字符串。它从根本上讲是关于查询结构与数据的分离。表的名称被视为查询结构的一部分,而不是数据的一部分。您需要将表名放在原始查询中。您的第一个代码就是实现它的方式。

$db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS account');

关于php - 在 php 中使用 pdo 创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17590594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com