当我尝试运行PDO执行时,我得到一个数组到字符串转换错误.执行必须输入一个是普通字符串而另一个是数组.继承我的代码:
$id = "1";
$array = array("a", "b", "c");
$in = str_repeat('?,', count($array) - 1) . '?';
$sql1 = "SELECT * FROM tbl1 AS tb1 RIGHT JOIN tbl2 AS tb2 ON (tb1.e_id = tb2.e_id)LEFT JOIN tbl3 AS tb3 ON (tb2.m_id = tb3.m_id) WHERE tb1.u_id = ? AND tb1.letters IN ($in)";
$statement1 = $db_handle->prepare($sql1);
$statement1->setFetchMode(PDO::FETCH_ASSOC);
$statement1->execute(array($id,$array));
$res = $statement1->fetchAll();
Run Code Online (Sandbox Code Playgroud)
所以执行行给了我字符串转换错误.我打印了我的数组和问号,输出很好.sql语句也没关系,我已经在phpMyAdmin上尝试了它并且工作得很好,所以我没有正确使用执行但我不知道如何改变我执行它的方式.
有人可以向我解释一下吗?
我知道这里有几个关于这个标题的其他问题,但它们似乎是特定于案例的,或者我无法绕过它,但我在这段代码上得到了这个错误,我无法弄清楚为什么.
$db = new PDO($dsn, $username, $password);
$query = "Select * FROM book INNER JOIN course
ON book.course = course.courseID
ORDER BY courseTitle";
//query result
$books = array();
$sth = $db->query($query);
while( $row = $db->fetch(PDO::FETCH_ASSOC) ) {
$books[] = $row; // appends each row to the array
}
Run Code Online (Sandbox Code Playgroud)
我想也许我的查询错了,所以我尝试了一个PDO教程的例子,我得到了相同类型的错误.我有什么要申报的,或者我要留下什么?
我在Symfony2上使用dbal从我的表中检索一些信息:
$social = $conn->fetchAll('SELECT * FROM page WHERE brand_id = :brand LIMIT :start,:limit', array('brand'=>$brand, 'start'=>(int) $start, 'limit'=>(int) $limit));
Run Code Online (Sandbox Code Playgroud)
我只是在添加最后一部分(LIMIT ....)时才收到错误,这让我觉得我不能在sql查询中限制结果但在外面使用某种命令.我怎么解决这个问题?
错误:
An exception occurred while executing 'SELECT * FROM page WHERE brand_id = :brand LIMIT :start,:limit' with params {"brand":1,"start":0,"limit":4}:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0','4'' at line 1
Run Code Online (Sandbox Code Playgroud) 我试图限制从SQL查询返回的结果数量,但由于某种原因它返回NULL.如果我删除LIMIT,一切正常.我在Sequel Pro中测试了这个查询,它也适用于LIMIT.我在这里做错了吗?
public static function getMostViewedPictures($limit = 5) {
$dbh = self::connectToDatabase();
$sql = "SELECT
picture.`title`,
picture.`description`,
picture.`slug`,
picture.`image`,
picture.`timestamp`,
picture.`views`,
category.category as category
FROM picture
LEFT JOIN category
ON picture.category_id = category.id
ORDER BY picture.views ASC
LIMIT 0, :limit";
$sth = $dbh->prepare($sql);
$sth->execute(array(':limit' => $limit));
if($results = $sth->fetchAll(PDO::FETCH_OBJ)) {
$pictures = array();
foreach($results as $result) {
$pictures[] = new Picture(
$result->title,
$result->description,
$result->slug,
$result->timestamp,
$result->category,
$result->views,
$result->image
);
}
return $pictures;
} else {
return null;
}
}
Run Code Online (Sandbox Code Playgroud) 我有代码:
$stmt = $db->prepare(" bla bla ");
$stmt->execute();
print_r($db->errorInfo());
Run Code Online (Sandbox Code Playgroud)
返回: Array ( [0] => 00000 [1] => [2] => )
为什么不返回错误信息?
我有2个问题
我经常看到这个
$sql->bindParam(':xxx', $yyy, PDO::PARAM_zzz);
$sql->execute();
Run Code Online (Sandbox Code Playgroud)
为什么不使用(1)
$sql->execute(array(':xxx'=>$yyy));
Run Code Online (Sandbox Code Playgroud)
如果有太多的价值我应该使用(2)
$sql->bindParam(':aaa', $bbb, PDO::PARAM_zzz);
$sql->bindParam(':ccc', $ddd, PDO::PARAM_zzz);
$sql->bindParam(':eee', $fff, PDO::PARAM_zzz);
$sql->execute();
Run Code Online (Sandbox Code Playgroud)
要么
$sql->execute(array(':aaa'=>$bbb,':ccc'=>$ddd,':eee'=>$fff));
Run Code Online (Sandbox Code Playgroud) 我正在编写一个简单的函数,使用 PHP 和 PDO 向表添加一列来准备查询。
连接 ( $dbh) 有效,其他不涉及参数的查询有效。但是,添加列的重要查询却没有。
当我检查数据库时,有一个新列,其中包含名为?(即只是问号)的列以及我指定的所有属性。
我检查以确保$column变量正确通过,此外,执行语句返回 false,因此据称该语句失败,但不知何故仍然创建了一个列。
错误信息不是很有帮助(至少对我来说):
Array ( [0] => 00000 ).
Run Code Online (Sandbox Code Playgroud)
我检查了代码中是否有简单的拼写错误,但找不到任何东西。有任何想法吗?
$qry='ALTER TABLE `completed` ADD `:column` TINYINT(1) NOT NULL DEFAULT 0';
$stmt = $GLOBALS['dbh']->prepare($qry);
$stmt->bindParam(":column",$column,PDO::PARAM_STR);
$stmt->execute();
$arr = $stmt->errorInfo();
print_r($arr);
$stmt===TRUE ? $return=1 : $return=0;
Run Code Online (Sandbox Code Playgroud) 列state属于table2以下varchars并由以下varchars组成:"AL","AK",..
在我的php代码中,我有以下字符串:$states="AL,AK,AZ,IL";
我试图在mySQL查询中以下列方式使用它:
$query = SELECT * FROM 'table2' WHERE 'state' IN('$states');
Run Code Online (Sandbox Code Playgroud)
它没有显示任何结果......这些撇号的正确语法是什么?
大家好我有一个使用mysql_*构建的程序,我试图将其转换为PDO,以确保安全性和折旧
所以我有一个像mysql_*函数设置的负载
return select_from_where('users', '*', "username = '$username' AND password = '$pass'", "LIMIT 1");
Run Code Online (Sandbox Code Playgroud)
我已经转换为PDO
return $conn -> query("SELECT * FROM users WHERE username = '$username' AND password = '$pass' LIMIT 1");
Run Code Online (Sandbox Code Playgroud)
但是程序没有提供正确的结果,我不确定它是否甚至返回数据
我的问题是,我是否必须将PDO响应设置为我可以使用的变量,或者是否可以使用与上面类似的方法返回我可以在程序中使用的值?
我为每个函数查询都包含了全局$ conn,所以我确定它是应该连接的,它只是没有按预期提供结果.
有没有人能快速解决这个问题,因为我的程序已经完成并正在等待发布:D
提前致谢
卢克
** 编辑线 *
$sql = ("SELECT * FROM users WHERE username = '$username' AND password = '$pass' LIMIT 1");
$stm = $conn->prepare($sql);
$stm->execute(array($username,$pass)); $user = $stm->fetch(); echo $user['username'];
Run Code Online (Sandbox Code Playgroud) 试图获取我的项目的列,从未在PDO中这样做,尝试查看文档,但它并没有真正帮助.
$sql = $CONNECT_TO_DATABASE->query("SELECT COUNT(*) FROM comments");
$result = $sql->fetch(PDO::FETCH_ASSOC);
$r = $result->fetchColumn();
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
致命错误:在第6行的C:\ xampp\htdocs\project\events.php中的非对象上调用成员函数fetchColumn()
$r = $result->fetchColumn();
Run Code Online (Sandbox Code Playgroud)
谢谢!
连接:
<?php
/**
* Connect to Database
* @Author Jony <artemkller@gmail.com>
**/
##################CHANGE THIS####################
/** #
* MYSQL HOST HERE (Example: localhost) #
**/ #
#
DEFINE ("MYSQL_HOST", "localhost"); #
#
/** #
* MYSQL USER HERE (Example: root) #
**/ #
#
DEFINE ("MYSQL_USER", "root"); #
#
/** #
* MYSQL PASSWORD HERE (Example: password) #
**/ #
# …Run Code Online (Sandbox Code Playgroud) 我正在尝试计算查询返回的行数,我这样做:
$what = 'Norman';
$stmt = $conn->prepare('select names as names from names where names = :what');
$stmt->bindParam('what', $what);
$stmt->execute();
$rows = $stmt->fetchColumn();
echo 'Rows found '.$rows;
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while($row = $stmt->fetch())
{
echo $row['names'] . "<br>";
}
Run Code Online (Sandbox Code Playgroud)
但我始终一无所获。只是空白。这样做的正确方法是什么?