我有一个具有多个结果集的存储过程.如何进入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都以空字符串形式返回.
还有其他人遇到这个并有解决方案吗?
我正在按照教程,但本教程的作者不回答问题 - 但这是我的查询
我收到以下错误警告: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) 如何通过游标从数据库列获取Timestamp值并将其存储在android sdk中的Timestamp变量中.我使用java.sql.Timestamp,sqlite数据库中的值是TIMESTAMP类型.我创建了一个具有所有字段作为数据库列名的类,并希望在从数据库中读取记录后创建新对象.
有人可以为我澄清使用MySQLi而不是MySQL的优点和缺点吗?有没有我不应该使用MySQLi的情况?我是否需要以不同方式配置我的服务器才能使用MySQLi?例如,我是否需要升级Apache或PHP以便支持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的mysql_*功能已被弃用,我不应该使用它们.
但是,我们有几个遗留的MySQL 4.0数据库,这些数据库mysqli_*和PDO函数都不支持连接.继续使用最新PHP版本并仍能连接到这些数据库的最佳方法是什么?
(根据PDO介绍页面顶部的描述,我最初认为PDO可能是一个选项,但是页面下方的Changelog表明在PHP 5.4中已经删除了对4.1之前的支持)
据我所知,MySQL 4.0已有10年历史,这里的真正问题是我们仍在使用它.升级MySQL是一个单独的问题,超出了我的影响力和这个问题的范围.我可以控制的是我们使用的PHP版本 - 我不想因为我们需要连接到一些旧数据库而不得不停止升级PHP.
我更新了上面的问题以反映我的新理解,即使PDO也不再连接到这些旧的MySQL服务器.
我还应该澄清,我们有几个遗留应用程序访问这些数据库,我们希望尽可能少地更改这些应用程序.他们没有积极开发,并且测试涉及重写大部分代码的更改将很快成为一个相当大的QA项目.
出于这个原因,诸如重写代码或升级MySQL版本之类的侵入式解决方案极不可能是值得的.如果它们是唯一可用的解决方案,我们可能最终无所事事 - mysql_*尽可能长时间使用,然后在最新的PHP无法再连接时冻结PHP版本(至少对这些应用程序而言).
另一方面,技术上复杂的解决方案(例如从头开始编译)绝对是可能的,并且实际上更倾向于进行大量的代码更改.
我现在正在提供赏金,希望得到新答案,提供更复杂的替代方案.
想知道我如何将PHP预处理语句的结果绑定到一个数组中然后我怎么去调用它们.例如这个查询
$q = $DBH->prepare("SELECT * FROM users WHERE username = ?");
$q->bind_param("s", $user);
$q->execute();
Run Code Online (Sandbox Code Playgroud)
这将返回结果的用户名,电子邮件和ID.想知道我是否可以将它绑定在一个数组中,然后将其存储在一个变量中,以便我可以在整个页面中调用它?
我正在将我的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新手,我意识到我的数据库连接,使用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的一个很好的例子吗?
我确定这是一个简单的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)