<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// This part of the code is unrelated to the article, only for demonstration</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Starting script...\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<p><hr></p>
<p><h2>What real-world examples show how <code>mysqli::</span>kill<span>
Sometimes, when a client disconnects unexpectedly, the MySQL backend thread may remain active, wasting resources. By using mysqli::kill, you can schedule cleanup of these “ghost” threads to maintain a healthy connection pool.
<span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span>="</span><span><span class="hljs-title">php</span></span><span>">
// Run periodically to clean up idle threads
$</span><span><span class="hljs-title">result</span></span><span> = $</span><span><span class="hljs-title">mysqli</span></span><span>-></span><span><span class="hljs-title">query</span></span><span>("</span><span><span class="hljs-title">SHOW</span></span><span> </span><span><span class="hljs-title">PROCESSLIST</span></span><span>");
</span><span><span class="hljs-title">while</span></span> ($</span><span><span class="hljs-title">row</span></span> = $</span><span><span class="hljs-title">result</span></span>-></span><span><span class="hljs-title">fetch_assoc</span></span>()) {
</span><span><span class="hljs-keyword">if</span></span> (</span><span><span class="hljs-variable">$row</span></span>[</span><span><span class="hljs-string">'Command'</span></span>] === </span><span><span class="hljs-string">'Sleep'</span></span> && </span><span><span class="hljs-variable">$row</span></span>[</span><span><span class="hljs-string">'Time'</span></span>] > </span><span><span class="hljs-number">300</span></span>) { </span><span><span class="hljs-comment">// No activity for 5 minutes</span></span>
</span><span><span class="hljs-variable">$mysqli</span></span>-></span><span><span class="hljs-title function_ invoke__">kill</span></span>(</span><span><span class="hljs-variable">$row</span></span>[</span><span><span class="hljs-string">'Id'</span></span>]);
</span><span><span class="hljs-keyword">echo</span></span> "Killed idle connection thread id: {$row['Id']}\n";
}
}
In some admin panels, administrators may want to forcefully terminate a user’s database connection (for example, when an account is locked). This can be done by locating the user’s thread ID and calling the kill method.
<span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span>="</span><span><span class="hljs-title">php</span></span><span>">
// Query specific user connection
$</span><span><span class="hljs-title">username</span></span> = '</span><span><span class="hljs-title">some_user</span></span>';
$</span><span><span class="hljs-title">result</span></span> = $</span><span><span class="hljs-title">mysqli</span></span>-></span><span><span class="hljs-title">query</span></span>("</span><span><span class="hljs-title">SHOW</span></span> </span><span><span class="hljs-title">PROCESSLIST</span></span>");
</span><span><span class="hljs-title">while</span></span> ($</span><span><span class="hljs-title">row</span></span> = $</span><span><span class="hljs-title">result</span></span>-></span><span><span class="hljs-title">fetch_assoc</span></span>()) {
</span><span><span class="hljs-keyword">if</span></span> (</span><span><span class="hljs-variable">$row</span></span>[</span><span><span class="hljs-string">'User'</span></span>] === </span><span><span class="hljs-variable">$username</span></span>) {
</span><span><span class="hljs-variable">$mysqli</span></span>-></span><span><span class="hljs-title function_ invoke__">kill</span></span>(</span><span><span class="hljs-variable">$row</span></span>[</span><span><span class="hljs-string">'Id'</span></span>]);
</span><span><span class="hljs-keyword">echo</span></span> "Killed user {$username}'s connection with thread id: {$row['Id']}\n";
}
}
With mysqli::kill, developers can flexibly and gracefully manage database connections—terminating long-running queries, cleaning up invalid sessions, and implementing forced disconnections for administrative needs. This approach offers finer control than simply closing a connection, helping maximize database and application stability and performance.
Related Tags:
mysqli