给定一组id $galleries = array(1,2,5)我想要一个SQL查询,它在WHERE子句中使用数组的值,如:
SELECT *
FROM galleries
WHERE id = /* values of array $galleries... eg. (1 || 2 || 5) */
Run Code Online (Sandbox Code Playgroud)
如何生成此查询字符串以用于MySQL?
在PHP中对对象进行排序的优雅方法是什么?我很想完成类似的事情.
$sortedObjectArary = sort($unsortedObjectArray, $Object->weight);
Run Code Online (Sandbox Code Playgroud)
基本上指定我想要排序的数组以及我想要排序的字段.我研究了多维数组排序,可能会有一些有用的东西,但我没有看到任何优雅或明显的东西.
你会如何在PHP中编写一个准备好的MySQL语句,每次都需要不同数量的参数?这种查询的一个例子是:
SELECT `age`, `name` FROM `people` WHERE id IN (12, 45, 65, 33)
Run Code Online (Sandbox Code Playgroud)
该IN子句id每次运行时都会有不同数量的s.
我脑子里有两种可能的解决方案,但想看看是否有更好的方法.
可能的解决方案1使语句接受100个变量,并使用保证不在表中的虚拟值填充其余变量; 多次调用超过100个值.
可能的解决方案2不要使用准备好的声明; 构建并运行查询严格检查可能的注入攻击.
我有一个充满随机内容项ID的数组.我需要运行一个mysql查询(数组中的id进入WHERE子句),使用数组中的每个ID,按照它们出现在所述数组中的顺序.我该怎么做?
对于数组中的每个ID,这将是一个UPDATE查询.
请看下面我的代码.我试图将参数数组绑定到我准备好的语句中.我一直在网上浏览,可以看到我必须使用call_user_func_array,但无法让它工作.我得到的错误是:"第一个参数应该是一个有效的回调,'数组'被给出"我可能是错的,但我假设第一个参数可以是一个数组,也许这个错误信息是误导性的.我认为问题是我的阵列在某种程度上是错误的.谁能看到我做错了什么?谢谢.
$type = array("s", "s");
$param = array("string1","anotherstring");
$stmt = $SQLConnection->prepare("INSERT INTO mytable (comp, addl) VALUES (?,?)");
$params = array_merge($type, $param);
call_user_func_array(array(&$stmt, 'bind_param'), $params);
$SQLConnection->execute();
Run Code Online (Sandbox Code Playgroud) 我不能让这个工作.我现在已经花了很多时间.
这有效:
$mysqli = new mysqli("localhost", "root", "root", "db");
if(!$mysqli || $mysqli->connect_errno)
{
return;
}
$query_str= "SELECT name FROM table WHERE city IN ('Nashville','Knoxville')";
$query_prepared = $mysqli->stmt_init();
if($query_prepared && $query_prepared->prepare($query_str))
{
$query_prepared->execute();
Run Code Online (Sandbox Code Playgroud)
但是我不能让它与这样的bind_param一起工作:
$query_str= "SELECT name FROM table WHERE city IN (?)";
$query_prepared = $mysqli->stmt_init();
if($query_prepared && $query_prepared->prepare($query_str))
{
$cities= explode(",", $_GET['cities']);
$str_get_cities= "'".implode("','", $get_cities)."'"; // This equals 'Nashville','Knoxville'
$query_prepared->bind_param("s", $cities);
$query_prepared->execute();
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我也试过call_user_func_array,但似乎无法使语法正确.任何帮助将不胜感激!
编辑:我已经严格尝试了moskito-x的建议和大量的例子列在这里以及其他在SO和随机网站上,没有任何作品.我认为问题可能是PHP 5.4,这就是我的MAMP现在设置的.
首先:
SELECT `key`, `value` FROM settings
WHERE `key` = :base_url
OR `key` = :google_analytics
OR `key` = :site_domain
Run Code Online (Sandbox Code Playgroud)
这是选择多行的正确方法吗?或者,还有更好的方法?因为它不是真的OR,而是所有这些...所以它听起来不对.
问题2:
这是我的查询选择具有分页的用户:
SELECT id, email, verified, level, name_surname, age, sex, profession, education, location, privacy, suspend FROM users LIMIT :start, :results
Run Code Online (Sandbox Code Playgroud)
有时我想传递一组用户返回此查询,比如array(1,2,3,4,5).
显然,简单地添加WHERE $array不起作用.那我该怎么做?
有时候我不想传递这个id数组,那么当有id列表和没有id列表时如何在状态之间切换?我是否只是在prepare语句中创建php if else?这似乎很明显,但最好问一下最佳做法:)
我对mysqli准备好的陈述很新,其实这是我第一次尝试它.我有这个代码块,我把echos放在每个命令之间,它显示aaa和bbb但不是ccc,我在这里做错了什么?
没有错误出现,只是一个空白屏幕:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
if ($stmt = $mysqli->prepare("SELECT title FROM `in-the-press`")) {
$stmt->execute();
echo 'aaa';
$stmt->bind_result($title);
echo 'bbb';
$result = $stmt->get_result();
echo 'ccc';
while ($stmt->fetch()) {
printf("%s %s\n", $title);
}
echo 'ddd';
$stmt->close();
}
$mysqli->close();
?>
Run Code Online (Sandbox Code Playgroud)
更新通过执行以下操作,我能够实现此功能:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
if ($stmt = $mysqli->prepare("SELECT id, community, map, image FROM `googleMaps`")) …Run Code Online (Sandbox Code Playgroud) 我正在尝试为用户输入编写准备好的语句。参数编号是可变的,取决于用户输入。我正在尝试这个代码
php代码:
$string = "my name";
$search_exploded = explode( " ", $string );
$num = count( $search_exploded );
$cart = array();
for ( $i = 1; $i <= $num; $i ++ ) {
$cart[] = 's';
}
$str = implode( '', $cart );
$inputArray[] = &$str;
$j = count( $search_exploded );
for ( $i = 0; $i < $j; $i ++ ) {
$inputArray[] = &$search_exploded[ $i ];
}
print_r( $inputArray );
foreach ( $search_exploded as $search_each ) {
$x …Run Code Online (Sandbox Code Playgroud) 我正在构建一个我在mysql db中检查的字符串.
eg:
formFields[] is an array - input1 is: string1
array_push(strings, formFields)
1st string and mysql query looks like this:
"select * from my table where id in (strings)"
formFields[] is an array - input2 is: string1, string2
array_push(strings, formFields)
2nd string and mysql query looks like this:
"select * from my table where id in (strings)"
formFields[] is an array - input3 is: string1, string2,string3
array_push(strings, formFields)
3rd string and mysql query looks like this:
"select * from …Run Code Online (Sandbox Code Playgroud)