<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>爱周末 &#187; php pdo</title>
	<atom:link href="http://zhoumo123.cn/tag/php-pdo/feed" rel="self" type="application/rss+xml" />
	<link>http://zhoumo123.cn</link>
	<description>知识分享，共同进步。zhoumo123.cn</description>
	<lastBuildDate>Thu, 07 Nov 2019 05:53:49 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0.1</generator>
	<item>
		<title>PDO参数化查询prepare() php防SQL注入</title>
		<link>http://zhoumo123.cn/pdo/3535.html</link>
		<comments>http://zhoumo123.cn/pdo/3535.html#comments</comments>
		<pubDate>Thu, 28 Jan 2016 07:28:52 +0000</pubDate>
		<dc:creator><![CDATA[zhangc]]></dc:creator>
				<category><![CDATA[pdo]]></category>
		<category><![CDATA[php pdo]]></category>
		<category><![CDATA[sql注入]]></category>
		<category><![CDATA[参数化SQL查询]]></category>

		<guid isPermaLink="false">http://zhoumo123.cn/?p=3535</guid>
		<description><![CDATA[PDO中参数化查询主要用到prepare()方法，然后这个方法会返回一个PDOStatement对象，也就SQL声明（不知道怎么翻译），此时SQL语句只是被编译，但并未执行，调用PDOStatement中方法后会执行SQL语句，如下示例： 在execute()执行前，就可以调用bindValue()或者bindParam()方法替换之前准备的SQL语句中的你指定参数了，在SQL语句中指定参数有两种方式：':name&#8217;和&#8217;?&#8217;，上面代码中的用的是前一种，后一种的方式是： bindValue()有三个参数，第一个指定要替换掉SQL语句中哪一个参数，第二个指定替换 ...  <a href="http://zhoumo123.cn/pdo/3535.html">  阅读全文 </a>]]></description>
				<content:encoded><![CDATA[<p>PDO中参数化查询主要用到prepare()方法，然后这个方法会返回一个PDOStatement对象，也就SQL声明（不知道怎么翻译），此时SQL语句只是被编译，但并未执行，调用PDOStatement中方法后会执行SQL语句，如下示例：</p>
<pre class="brush: php; title: ; notranslate">
$sm = $db-&gt;prepare('SELECT login_oid FROM logined WHERE user_id=:user_id;');
$sm-&gt;bindValue(':user_id', $user_id, PDO::PARAM_INT);
$sm -&gt; execute();
</pre>
<p>在execute()执行前，就可以调用bindValue()或者bindParam()方法替换之前准备的SQL语句中的你指定参数了，在SQL语句中指定参数有两种方式：':name&#8217;和&#8217;?&#8217;，上面代码中的用的是前一种，后一种的方式是：</p>
<pre class="brush: php; title: ; notranslate">
$sm = $db-&gt;prepare('SELECT * FROM fruit WHERE calories &lt; ?;');
$sm-&gt;bindValue(1, $calories, PDO::PARAM_INT);
$sm-&gt;execute();
</pre>
<p>bindValue()有三个参数，第一个指定要替换掉SQL语句中哪一个参数，第二个指定替换后的值，第三个指定值的类型，类型对应如下：<br />
PDO::PARAM_BOOL<br />
布尔类型</p>
<p>PDO::PARAM_NULL<br />
NULL类型</p>
<p>PDO::PARAM_INT<br />
整数类型</p>
<p>PDO::PARAM_STR<br />
字符串类型如 CHAR, VARCHAR, string</p>
<p>PDO::PARAM_LOB<br />
资源类大对象，如文件等</p>
<p>PDO::PARAM_STMT<br />
不知道</p>
<p>PDO::PARAM_INPUT_OUTPUT<br />
这个好像是扩展类型</p>
<p>里面没有提供实数类型，这个很诧异.</p>
<p>再说说execute()这个方法，它本身也可以做参数替换，但是它会把所有值的类型都变成字符串类型，如下</p>
<pre class="brush: php; title: ; notranslate">
$sm = $db-&gt;prepare('SELECT * FROM fruit WHERE calories &lt; ?;');
$sm-&gt;execute(array($calories));
</pre>
<p>多参数替换如下</p>
<pre class="brush: php; title: ; notranslate">
$sm = $db-&gt;prepare('SELECT * FROM fruit WHERE calories &lt; ?, id &lt; ?;');
$sm-&gt;execute(array($calories, $user_id));
</pre>
<p>http://my.oschina.net/cers/blog/41739?fromerr=ezofpZnY</p>
]]></content:encoded>
			<wfw:commentRss>http://zhoumo123.cn/pdo/3535.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
