在mysqli预处理语句中,NULL变为''(在字符串的情况下)或0(在整数的情况下).我想将它存储为真正的NULL.有没有办法做到这一点?
我有一个函数,它根据要插入到该列的列名和值的关联数组以及一个表名(一个简单的字符串)生成一个准备好的INSERT语句:
function insert ($param, $table) {
$sqlString = "INSERT INTO $table (".implode(', ',array_keys($param)).') VALUES ('.str_repeat('?, ', (count($param) - 1)).'?)';
if ($statement = $this->conn->prepare($sqlString)):
$parameters = array_merge(array($this->bindParams($param), $param));
call_user_func_array(array($statement, 'bind_param', $parameters));
if (!$statement->execute()):
die('Error! '.$statement->error());
endif;
$statement->close();
return true;
else:
die("Could Not Run Statement");
endif;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是$ this-> conn-> prepare(它是一个类的一部分,conn是一个新的mysqli对象,它没有问题)返回false,但是没有给我一个理由!
以下是为prepare语句构建的示例$ sqlString:
INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
Run Code Online (Sandbox Code Playgroud)
任何人都可以看到这个参数化语句的问题?prepare函数返回false的原因是什么?
在这个查询中
select wrd from tablename WHERE wrd LIKE '$partial%'
Run Code Online (Sandbox Code Playgroud)
我正在尝试将变量'$partial%'与PDO 绑定.不知道这%最终是如何工作的.
可不可能是
select wrd from tablename WHERE wrd LIKE ':partial%'
Run Code Online (Sandbox Code Playgroud)
在哪里:partial受到约束$partial="somet"
还是会的?
select wrd from tablename WHERE wrd LIKE ':partial'
Run Code Online (Sandbox Code Playgroud)
在哪里:partial受到约束$partial="somet%"
或者它会完全不同?
我无法从mysql SELECT方法转移到PDO方法.我想迭代两次获取的数组,两次从第0行开始.在mysql中我会使用:
mysql_data_seek($result,0);
Run Code Online (Sandbox Code Playgroud)
使用PDO方法,我不知道如何完成同样的事情.下面的代码是我试图这样做的方式.第一个while循环工作正常但第二个while循环没有返回任何东西.有人可以告诉我哪里出错了吗?
$pdo = new PDO('mysql:host=' . $host . ';dbname='.$database, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('SELECT * FROM mytable WHERE active = 1 ORDER BY name ASC');
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$stmt->execute();
while($row = $stmt->fetch())
{
//do something starting with row[0]
}
while($row = $stmt->fetch())
{
//do something else starting with row[0]
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
我正在查看我的代码并读取它已被建议在mysqli_free_result不再需要结果对象时使用.但是在看到每个查询$result在整个脚本中反复输出到变量后,我想知道是否mysqli_free_result真的有必要.似乎每次运行查询时,$result变量已被擦除干净并设置为新结果.只是好奇是否有人对此有任何意见.
我有办法获取表的列的名称.它工作正常,但现在我想更新到新的mysqli?(我尝试了mysqli_fetch_field,但我不知道如何应用于这种情况,我不确定它是否是wright选项)
如何用mysqli做同样的事情?:
$sql = "SELECT * from myTable";
$result = mysql_query($sql,$con);
$id = mysql_field_name($result, 0);
$a = mysql_field_name($result, 1);
echo $id;
echo $a;
Run Code Online (Sandbox Code Playgroud) 如果我使用这样的代码:
$update_result = mysqli_query( $link , $sql_update_login ) or die ('Unable to execute query. '. mysqli_error($link));
Run Code Online (Sandbox Code Playgroud)
它是否必须死亡或者您之后可以提出不同的查询?就像将错误日志写入另一个表的预定函数一样?如:
$update_result = mysqli_query( $link , $sql_update_login ) or function('$query, $error);
Run Code Online (Sandbox Code Playgroud)
'或'之后的其他选项有哪些?我没有在文档中找到它,任何线索都表示赞赏.
CentOS上的PHP 5.3.3版(x86_64,RHEL 6)
显然我的PHP安装配置为排除Mysqli并因某些原因禁用PDO.因此,我相信当我尝试使用shell中的php命令时,这就是导致它们无法工作的原因.我可以通过HTTP加载mysqli和pdo就好了,但它们无法在shell中运行.如何启用这些组件以及这样做有哪些风险?
配置命令:
'./configure' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--disable-rpath' '--without-pear' '--with-bz2' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--with-xpm-dir=/usr' '--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-sysvmsg' '--with-kerberos' '--enable-ucd-snmp-hack' '--enable-shmop' '--enable-calendar' '--without-sqlite' '--with-libxml-dir=/usr' '--enable-xml' '--with-system-tzdata' '--with-apxs2=/usr/sbin/apxs' '--without-mysql' '--without-gd' '--disable-dom' '--disable-dba' '--without-unixODBC' '--disable-pdo' '--disable-xmlreader' '--disable-xmlwriter' '--without-sqlite3' '--disable-phar' '--disable-fileinfo' '--disable-json' '--without-pspell' '--disable-wddx' '--without-curl' '--disable-posix' '--disable-sysvmsg' '--disable-sysvshm' …Run Code Online (Sandbox Code Playgroud) 我有大量的MySQL查询(1.8M行,25列),我需要从中创建二维数组(基于主键的内存表).
代码按预期工作,但$ table创建在PHP7.0中需要很长时间.
PHP7.0表现如此糟糕的原因是什么?我的主要兴趣在于mysqli.
感谢您的任何见解 - 如果我可以修复性能,PHP7会为我节省大量内存.
mysqli代码片段
$start = microtime(true);
$vysledek = cluster::query("SELECT * FROM `table` WHERE 1");
$query_time = (microtime(true) - $start);
$start_fetch = microtime(true);
while($zaznam = mysqli_fetch_assoc ( $vysledek )){
$fetch_time+= (microtime(true) - $start_fetch);
$start_assign = microtime(true);
$table[$zaznam['prikey']] = $zaznam;
$assign_time+= (microtime(true) - $start_assign);
$start_fetch = microtime(true);
}
$total_time+= (microtime(true) - $start);
echo round($assign_time, 2).' seconds to set the array values\n';
echo round($query_time, 2).' seconds to execute the query\n';
echo round($fetch_time, 2).' seconds to fetch data\n'; …Run Code Online (Sandbox Code Playgroud) 请不要将其标记为重复我无法在任何地方找到答案我不知道还能做什么.
我通过XAMPP与mysql连接一直出现以下错误,我不知道该怎么做:
这是config.inc.php中的代码
<?php
/*
* This is needed for cookie based authentication to encrypt password in
* cookie
*/
$cfg['blowfish_secret'] = 'xampp'; /* YOU SHOULD CHANGE THIS FOR A MORE
SECURE COOKIE AUTH! */
/*
* Servers configuration
*/
$i = 0;
/*
* First server
*/
$i++;
/* Authentication type and info */
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$cfg['Lang'] = '';
/* Bind to the localhost ipv4 address …Run Code Online (Sandbox Code Playgroud) mysqli ×10
php ×8
mysql ×5
pdo ×2
centos ×1
database ×1
null ×1
performance ×1
phpmyadmin ×1
xampp ×1