我是使用 PDO 发出数据库请求的新手,需要一点帮助。我有以下数据库调用:
$stmt1 = $pdo->prepare('
SELECT * FROM news WHERE pub_date >= ? AND pub_date < ? AND display = 1 ORDER BY pub_date DESC
UNION
SELECT * FROM vs_news WHERE pub_date >= ? AND pub_date < ? AND display = 1 ORDER BY pub_date DESC
');
$stmt1->bindParam(1, $col_start);
$stmt1->bindParam(2, $col_end);
$stmt1->execute();
Run Code Online (Sandbox Code Playgroud)
我已经阅读了足够多的内容,认为 UNION 与 PDO 兼容,但我似乎无法正确获取代码,也找不到完整代码格式的示例。
两个表中的字段相同,并且 db 调用仅适用于一个或另一个表,但不适用于我展示的 UNIION。
有人可以指出我的问题在哪里吗?
谢谢
我正在尝试使用 PDO id_facebook (mysql bigint)、name(mysql varchar) 和 email(mysql varchar) 插入,但无法解决此错误,PDO 语法看起来正确,可以是什么?
public static function inserirUsuarioFacebook($id_facebook, $nome, $email)
{
try
{
$pdo = Conexao::getInstance();
$consulta = $pdo->prepare("INSERTO INTO usuario_facebook (id_facebook, nome, email) VALUES (:id_facebook, ':nome', ':email')");
$consulta->bindParam(':id_facebook', $id_facebook, PDO::PARAM_INT);
$consulta->bindParam(':nome', $nome, PDO::PARAM_STR);
$consulta->bindParam(':email', $email, PDO::PARAM_STR);
$consulta->execute();
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
Run Code Online (Sandbox Code Playgroud) 我在使用SQL LIMIT语句时遇到问题.我有21条记录存储在数据库中,我想分段得到结果.我写了这个查询:
"SELECT * FROM table JOIN another_table ON XXX = YYY WHERE XXX = ? ORDER BY col DESC LIMIT ?, ?"
Run Code Online (Sandbox Code Playgroud)
这是我使用此值时获得的行数:
LIMIT: 0 .. 10 ---> num of rows 10 -> Correct
LIMIT: 10 .. 20 ---> num of rows 11 -> Incorrect
LIMIT: 20 .. 30 ---> num of rows 0 -> Incorrect
Run Code Online (Sandbox Code Playgroud)
代码用于php函数和数据库操作我使用PDOStatement类,但这个错误也表现在使用MySQLi类.
有谁知道问题在哪里?
只需编写PHP网站并使用mySqli进行数据库连接.真的很享受它,因为我可以使用Prepare语句,然后执行一个$result = $stmt->get_result();将结果加载到关联的数组中.但是,最好是时候将几页和数据库上传到托管站点以测试速度,并发现它不支持该$stmt->get_result();命令,需要使用我的主机不支持的mysqlnd驱动程序.
调查这一点也不是许多主机提供商.现在,当我启动网站时,我回头看了一些旧的PHP代码,显然我以前使用的正常mySql代码已经过时,并且在互联网上被告知使用mySQLi只是为了发现对此的支持正在下降到?!所以它会看到,那么最好使用的mySql连接是什么?
我有这个登录页面,我在看Udemy的教程时写了它.他的代码工作正常,但在我的代码(相同)中,我有以下错误:
致命错误:在非对象上调用成员函数prepare()
这是代码:
<?php
//$var = 'This is our first web app page';
//echo $var;
//Connection Variables:
$dbhost = "localhost";
$dbname = "graphic_db";
$dbuser = "root";
$dbpass = "root";
//Connection to SQL:
$conn = new PDO("mysql:host=$dbhost; dbname=$dbname", $dbuser, $dbpass);
//Error messagin enabled:
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Adding a character set:
$conn = exec("SET CHARACTER SET utf8mb4");
$user = '';
$pass = '';
$sum = 0;
$error_msg = "Please type a username and a password";
if(isset($_POST['login_submit']))
{
//Start a session:
session_start();
$user = …Run Code Online (Sandbox Code Playgroud) 编辑我的旧代码后,我得到错误Undefined property: PDO::$affected_rows,这里的部分if ($this->dbCon->affected_rows > 0) 可以帮助我解决这个问题
class Relation {
private $loggedInUser;
private $dbCon;
public function getRelationship(User $user) {
$user_one = (int) $this->loggedInUser->getUserId();
$user_two = (int) $user->getUserId();
if ($user_one > $user_two) {
$temp = $user_one;
$user_one = $user_two;
$user_two = $temp;
}
$resultObj = $this->dbCon->prepare('SELECT * FROM relationship WHERE user_one_id=:user_one AND user_two_id=:user_two');
$resultObj->execute(array(':user_one' => $user_one,':user_two' => $user_two));
if ($this->dbCon->affected_rows > 0) {
$row = $resultObj->fetch(PDO::FETCH_ASSOC);
$relationship = new Relationship();
$relationship->arrToRelationship($row, $this->dbCon);
return $relationship;
}
return false;
} …Run Code Online (Sandbox Code Playgroud) 我试图用一个关联数组bindParams,循环通过foreach,但我不知道它以某种方式工作.我收到此错误:
SQLSTATE [HY093]:参数号无效:绑定变量数与令牌数不匹配
这是代码.var $columns也$values来自数组,被操纵,所以它接受它们就像x, x, x和:x, :x, :x
$stmt1 = $conn->prepare("INSERT INTO data($columns)
VALUES ($values)");
foreach ($array as $key => $value)
{
$key = ":" . $key;
$stmt1->bindParam($key, $value);
$stmt1->execute();
}
Run Code Online (Sandbox Code Playgroud)
我很确定这些列正在对数组中的键进行管理.
编辑:更多的代码
$values = '';
$columns = implode(',', $array);
foreach($array as $key)
{
$values .= ":" . $key . ",";
}
$values = substr($values , 0, -1);
Run Code Online (Sandbox Code Playgroud) 我正在尝试将数组内容添加到数据库中.因为它我正在使用
$arr = ["10","11","12","13"];
foreach ($arr as $value) {
$sql = "INSERT INTO `test` (user_id, view) VALUES (:user_id, :view)";
$stmt = $this->conn->prepare($sql);
$stmt->bindParam(':user_id', $value);
$stmt->bindParam(':view', 'small');
$stmt->execute();
}
Run Code Online (Sandbox Code Playgroud)
是好的做法还是坏的?还有其他好方法吗?
所以我尝试随机选择 2 行,但 id 不允许等于 x 或等于 y。
这就是我到目前为止所尝试的:
$statment = $db -> "SELECT * FROM player ORDER BY RAND() LIMIT 2 WHERE
NOT(id = ?) OR WHERE NOT(id=?)";
$statement->execute(array($player1, $player2));
Run Code Online (Sandbox Code Playgroud)
但得到:
解析错误:语法错误,意外的“SELECT * FROM player ORDER BY”(T_CONSTANT_ENCAPSED_STRING),期望标识符(T_STRING)或变量(T_VARIABLE)
我正在尝试使用PDO从我的数据库中选择信息.直到->prepare()->execute()方法正常工作的一切.转储响应时,我得到一个布尔值true响应.
但是一旦我使用->fetchAll()我就会收到以下错误:
致命错误:在布尔值中调用成员函数fetchAll()....
我不确定为什么会这样.我应该在结果中收到一行.代码如下:
$host = 'localhost';
$db = 'database';
$user = 'useername';
$pass = 'password';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$connection = new PDO($dsn, $user, $pass, $opt);
$connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$query = 'SELECT * FROM gen_dealers WHERE dealer = ?';
$result = $connection->prepare($query)->execute(['General Motors']);
echo $result; // returns 1
$result->fetchAll(PDO::FETCH_UNIQUE); // returns the Fatal error mentioned above
Run Code Online (Sandbox Code Playgroud)