标签: mysqli

在php/mysqli中使用存储过程检索多个结果集

我有一个具有多个结果集的存储过程.如何进入mysqli的第二个结果集来获得这些结果?

让我们说这是一个存储过程,如:

create procedure multiples( param1 INT, param2 INT )
BEGIN

SELECT * FROM table1 WHERE id = param1;

SELECT * FROM table2 WHERE id = param2;

END $$
Run Code Online (Sandbox Code Playgroud)

PHP是这样的:

$stmt = mysqli_prepare($db, 'CALL multiples(?, ?)');

mysqli_stmt_bind_param( $stmt, 'ii', $param1, $param2 );

mysqli_stmt_execute( $stmt );

mysqli_stmt_bind_result( $stmt, $id );
Run Code Online (Sandbox Code Playgroud)

然后这是我无法工作的部分.我已经尝试使用mysqli_next_result移动到下一个结果集,但无法使其工作.我们确实让它与mysqli_store_result和mysqli_fetch_assoc/array/row一起使用,但由于某种原因,所有的int都以空字符串形式返回.

还有其他人遇到这个并有解决方案吗?

php mysqli stored-procedures resultset

15
推荐指数
1
解决办法
2万
查看次数

警告:mysqli_error()只需要1个参数,0给出错误

我正在按照教程,但本教程的作者不回答问题 - 但这是我的查询

我收到以下错误警告:mysqli_error()预计正好1个参数,0给出,问题是这行代码 -

$query = mysqli_query($myConnection, $sqlCommand) or die (mysqli_error()); 
Run Code Online (Sandbox Code Playgroud)

整个代码是

session_start();

require_once "scripts/connect_to_mysql2.php";

//Build Main Navigation menu and gather page data here

$sqlCommand = "SELECT id, linklabel FROM pages ORDER BY pageorder ASC";

$query = mysqli_query($myConnection, $sqlCommand) or die (mysqli_error()); 

$menuDisplay = '';
while ($row = mysqli_fetch_array($query)) { 
    $pid = $row["id"];
    $linklabel = $row["linklabel"];

    $menuDisplay .= '<a href="index.php?pid=' . $pid . '">' . $linklabel . '</a><br />';

} 
mysqli_free_result($query); 
Run Code Online (Sandbox Code Playgroud)

包含的文件包含以下行

$myConnection = mysqli_connect("$db_host","$db_username","$db_pass","$db_name") or die ("could not …
Run Code Online (Sandbox Code Playgroud)

php mysqli

15
推荐指数
3
解决办法
13万
查看次数

如何通过游标获取android中的Timestamp列值

如何通过游标从数据库列获取Timestamp值并将其存储在android sdk中的Timestamp变量中.我使用java.sql.Timestamp,sqlite数据库中的值是TIMESTAMP类型.我创建了一个具有所有字段作为数据库列名的类,并希望在从数据库中读取记录后创建新对象.

java sql sqlite android mysqli

15
推荐指数
1
解决办法
8027
查看次数

什么时候应该使用MySQLi而不是MySQL?

有人可以为我澄清使用MySQLi而不是MySQL的优点和缺点吗?有没有我不应该使用MySQLi的情况?我是否需要以不同方式配置我的服务器才能使用MySQLi?例如,我是否需要升级Apache或PHP以便支持MySQLi?

php mysql mysqli

15
推荐指数
2
解决办法
2万
查看次数

使用MySQLi设置字符集

我用MySQLi从MySQL表中获取阿拉伯语数据.所以我通常在程序风格中使用它:

mysql_query("SET NAMES 'utf8'"); 
mysql_query('SET CHARACTER SET utf8'); 
Run Code Online (Sandbox Code Playgroud)

现在我正在使用OOP风格,所以我试图看看是否有可以设置的东西而不是上面的东西?

我只在PHP手册中找到了这个,所以我做了,但是如何将名称设置为UTF8呢?

$mysqli->set_charset("utf8");
Run Code Online (Sandbox Code Playgroud)

php mysqli

15
推荐指数
4
解决办法
5万
查看次数

连接到旧的MySQL服务器

我知道PHP的mysql_*功能已被弃用,我不应该使用它们.

但是,我们有几个遗留的MySQL 4.0数据库,这些数据库mysqli_*PDO函数都不支持连接.继续使用最新PHP版本并仍能连接到这些数据库的最佳方法是什么?

(根据PDO介绍页面顶部的描述,我最初认为PDO可能是一个选项,但是页面下方的Changelog表明在PHP 5.4中已经删除了对4.1之前的支持)

据我所知,MySQL 4.0已有10年历史,这里的真正问题是我们仍在使用它.升级MySQL是一个单独的问题,超出了我的影响力和这个问题的范围.我可以控制的是我们使用的PHP版本 - 我不想因为我们需要连接到一些旧数据库而不得不停止升级PHP.

更新(2):

我更新了上面的问题以反映我的新理解,即使PDO也不再连接到这些旧的MySQL服务器.

我还应该澄清,我们有几个遗留应用程序访问这些数据库,我们希望尽可能少地更改这些应用程序.他们没有积极开发,并且测试涉及重写大部分代码的更改将很快成为一个相当大的QA项目.

出于这个原因,诸如重写代码或升级MySQL版本之类的侵入式解决方案极不可能是值得的.如果它们是唯一可用的解决方案,我们可能最终无所事事 - mysql_*尽可能长时间使用,然后在最新的PHP无法再连接时冻结PHP版本(至少对这些应用程序而言).

另一方面,技术上复杂的解决方案(例如从头开始编译)绝对是可能的,并且实际上更倾向于进行大量的代码更改.

我现在正在提供赏金,希望得到新答案,提供更复杂的替代方案.

php mysql mysqli pdo

15
推荐指数
1
解决办法
4722
查看次数

bind_result成为一个PHP mysqli编写的数组语句

想知道我如何将PHP预处理语句的结果绑定到一个数组中然后我怎么去调用它们.例如这个查询

$q = $DBH->prepare("SELECT * FROM users WHERE username = ?");
$q->bind_param("s", $user);
$q->execute();
Run Code Online (Sandbox Code Playgroud)

这将返回结果的用户名,电子邮件和ID.想知道我是否可以将它绑定在一个数组中,然后将其存储在一个变量中,以便我可以在整个页面中调用它?

php arrays mysqli prepared-statement

14
推荐指数
3
解决办法
3万
查看次数

mysqli更新查询应该返回结果吗?

我正在将我的PHP代码从mysql更新为mysqli,但我似乎无法找到这个问题的答案:mysqli更新查询是否会返回结果?

使用mysql,我可以做到

$result = mysql_query("UPDATE `data` SET `field1` = 1 WHERE `key` = '$mykey');
Run Code Online (Sandbox Code Playgroud)

即使查询没有返回任何行,$ result也是如此.

但是,现在,在mysqli代码中,我有类似的东西(为清晰起见,删除了错误处理):

$stmt = $mysqli->prepare("UPDATE `data` SET `field1` = 1 WHERE `key` = (?)")
$stmt->bind_param("s", $mykey);
$stmt->execute();
$result = $stmt->get_result();
Run Code Online (Sandbox Code Playgroud)

而$ result是假的.

对于记录,查询是有效的(忽略我可能已经将其转录到stackoverflow中的任何拼写错误)并且数据库中的field1按预期正确更新.此外,get_result()适用于选择查询,因此get_result()不可用.

基本上,我只是想知道这种改变的行为是否是预期的,或者我是否应该继续尝试在某处找到一些bug.

php mysql mysqli

14
推荐指数
2
解决办法
8759
查看次数

mysqli_real_escape_string安全吗?

我是PHP新手,我意识到我的数据库连接,使用php表单(用户和传递文本输入)是完全不安全的:

这很有效,但不安全:

<?php
$link=mysqli_connect('localhost','xx','xx','xx');
$sql='  SELECT * FROM usuarios 
        WHERE username="'.$_POST['usuario'].'" 
        AND pass="'.$_POST['usuario'].'"
     ';
$rs=mysqli_query($link,$sql);
mysqli_close($link);
?>
Run Code Online (Sandbox Code Playgroud)

所以,我读过mysqli_real_escape_string,并决定尝试一下:

<?php    
$link=mysqli_connect('localhost','xx','xx','xx');
$usuario=mysqli_real_escape_string($link, $_POST["usuario"]);
$clave=mysqli_real_escape_string($link, $_POST["clave"]);
$sql='  SELECT * FROM usuarios 
        WHERE username="'.$usuario.'" 
        AND pass="'.$clave.'"
     ';
$rs=mysqli_query($link,$sql);
mysqli_close($link);
?>
Run Code Online (Sandbox Code Playgroud)

它是否正确?这是如何使用mysqli_real_escape_string的一个很好的例子吗?

php mysqli sql-injection

14
推荐指数
3
解决办法
4万
查看次数

从SQL查询创建Spark Dataframe

我确定这是一个简单的SQLContext问题,但我在Spark文档或Stackoverflow中找不到任何答案

我想从MySQL上的SQL查询创建Spark Dataframe

例如,我有一个复杂的MySQL查询

SELECT a.X,b.Y,c.Z FROM FOO as a JOIN BAR as b ON ... JOIN ZOT as c ON ... WHERE ...
Run Code Online (Sandbox Code Playgroud)

我想要一个包含X,Y和Z列的Dataframe

我想出了如何将整个表加载到Spark中,我可以将它们全部加载,然后在那里进行加入和选择.然而,这是非常低效的.我只想加载我的SQL查询生成的表.

这是我目前对代码的近似,但不起作用.Mysql-connector有一个"dbtable"选项,可用于加载整个表.我希望有一些方法来指定查询

  val df = sqlContext.format("jdbc").
    option("url", "jdbc:mysql://localhost:3306/local_content").
    option("driver", "com.mysql.jdbc.Driver").
    option("useUnicode", "true").
    option("continueBatchOnError","true").
    option("useSSL", "false").
    option("user", "root").
    option("password", "").
    sql(
"""
select dl.DialogLineID, dlwim.Sequence, wi.WordRootID from Dialog as d
join DialogLine as dl on dl.DialogID=d.DialogID
join DialogLineWordInstanceMatch as dlwim o n dlwim.DialogLineID=dl.DialogLineID
join WordInstance as wi on wi.WordInstanceID=dlwim.WordInstanceID
join WordRoot as wr on wr.WordRootID=wi.WordRootID
where …
Run Code Online (Sandbox Code Playgroud)

sql mysqli scala mysql-connector apache-spark

14
推荐指数
1
解决办法
2万
查看次数